aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog.bidi582
1 files changed, 0 insertions, 582 deletions
diff --git a/src/ChangeLog.bidi b/src/ChangeLog.bidi
deleted file mode 100644
index 33982c21450..00000000000
--- a/src/ChangeLog.bidi
+++ /dev/null
@@ -1,582 +0,0 @@
12010-03-29 Eli Zaretskii <eliz@gnu.org>
2
3 * doc/emacs/mule.texi (International): Mention support of
4 bidirectional editing.
5 (Bidirectional Editing): New section.
6
72010-03-28 Eli Zaretskii <eliz@gnu.org>
8
9 * etc/HELLO: Reorder Arabic and Hebrew into logical order, and
10 insert RLM before the opening paren, to make the display more
11 reasonable. Add setting for bidi-display-reordering in the local
12 variables section.
13
14 * lisp/files.el: Make bidi-display-reordering safe variable for
15 boolean values.
16
17 * xdisp (append_glyph): If the glyph row is reversed, prepend the
18 glyph rather than appending it.
19
20 * makefile.w32-in (OBJ1): Add $(BLD)/bidi.$(O).
21 ($(BLD)/bidi.$(O)): New target.
22
23 * bidi.c (bidi_get_next_char_visually): Improve commentary.
24
25 * dispextern.h (PRODUCE_GLYPHS): Set the reversed_p flag in the
26 iterator's glyph_row here.
27
28 * xdisp.c (handle_invisible_prop, set_iterator_to_next)
29 (next_element_from_buffer): Don't set the reversed_p flag in the
30 iterator's glyph_row here.
31
322010-03-20 Eli Zaretskii <eliz@gnu.org>
33
34 * xdisp.c (set_cursor_from_row): Don't miss a candidate row whose
35 glyph->charpos is an exact match for point.
36 (try_cursor_movement): Don't give up if rows are bidi-reordered
37 and point moved backwards. Instead, back up to the row that is
38 not a continuation line.
39
402010-03-13 Eli Zaretskii <eliz@gnu.org>
41
42 * xdisp.c (try_cursor_movement): Give up if rows are
43 bidi-reordered and point moved backwards. Examine all the
44 candidate rows that occlude point, to return the best match.
45 (row_containing_pos): With bidi-reordered rows, don't return the
46 first one that occludes point; rather, examine all candidates and
47 return the best match, with he glyph that's closest to point.
48 (display_line): When looking for min position, don't consider
49 negative values of glyph->charpos. (Fixes a crash with "C-x 3" at
50 ZV.) Record the position after EOL in it->eol_pos, and use it to
51 set end_pos of the last row produced for a continued line. Fix
52 the condition for passing candidate rows to set_cursor_from_row:
53 check ends_at_zv_p flag of the best candidate row, not of the
54 current row.
55
56 * dispextern.h (struct it): New member eol_pos.
57
58 * .gdbinit (prowlims): Display the ends_at_zv_p flag.
59
602010-03-06 Eli Zaretskii <eliz@gnu.org>
61
62 * .gdbinit (prowlims, pmtxrows): New commands.
63
64 * xdisp.c (display_line): Special-case the calculation of row->end
65 in rows that end at ZV, to avoid abort in CHAR_TO_BYTE. Handle
66 empty lines correctly when calculating row's max and min pos.
67 Display cursor at the first glyph row that has its ends_at_zv_p
68 flag set.
69
702010-02-20 Eli Zaretskii <eliz@gnu.org>
71
72 * xdisp.c (set_cursor_from_row): Compare candidate cursor
73 positions only in rows whose buffer positions occlude point.
74 (display_line): Fix computation of row->start and row->end for
75 empty lines.
76
77 * dispnew.c (row_equal_p): Compare the reversed_p attributes as
78 well.
79
802010-02-13 Eli Zaretskii <eliz@gnu.org>
81
82 * xdisp.c (set_cursor_from_row): Don't overwrite cursor position
83 if it is not a better candidate than what we already have.
84 (display_line): Keep calling set_cursor_from_row for
85 bidi-reordered rows even if we already have a possible candidate
86 for cursor position. Undo the row_end setting throughout the
87 code, and instead do it after all the row's glyphs have been
88 produced, by looping over the glyphs.
89
902010-02-06 Eli Zaretskii <eliz@gnu.org>
91
92 Start working on cursor movement in continuation lines.
93 * xdisp.c (move_it_in_display_line_to): New variables prev_method
94 and prev_pos. Compare for strict equality in
95 BUFFER_POS_REACHED_P.
96
972010-01-30 Eli Zaretskii <eliz@gnu.org>
98
99 Fix fallout from changes to managing glyph row reversed_p flag.
100 * xdisp.c (init_iterator): Initialize it->glyph_row->reversed_p
101 flag.
102
1032010-01-25 Eli Zaretskii <eliz@gnu.org>
104
105 Clean up the mess with setting the glyph row reversed_p flag.
106 * dispnew.c (prepare_desired_row): Preserve the reversed_p flag.
107
108 * bidi.c (bidi_cache_find): Use bidi_copy_it instead of copying
109 the whole struct (which includes uninitialized parts).
110 (bidi_init_it): Don't initialize bidi_it->paragraph_dir.
111
112 * xdisp.c (display_line): Remove misplaced setting of
113 row->reversed_p flags. Copy the reversed_p flag to the next glyph
114 row.
115 (next_element_from_buffer): Check bidi_it.paragraph_dir rather
116 than level_stack[0].level. Reset the reversed_p flag for non-R2L
117 paragraphs.
118
119 Fix display of invisible text.
120 * xdisp.c (handle_invisible_prop): If we are `reseat'ed, init the
121 paragraph direction and set the `reversed_p' flag in the IT's
122 glyph row. Fix exit conditions of the loop that skips invisible
123 text. Update IT->prev_stop after skipping invisible text. Check
124 for additional overlays at IT->stop_charpos, not at start_pos.
125
1262010-01-16 Eli Zaretskii <eliz@gnu.org>
127
128 * xdisp.c (handle_invisible_prop): Under bidi iteration, skip
129 invisible text using bidi_get_next_char_visually.
130 (handle_stop_backwards): Restore it->bidi_p, it->current and
131 it->position before calling handle_stop.
132 (next_element_from_buffer): Fix formatting.
133
1342010-01-09 Eli Zaretskii <eliz@gnu.org>
135
136 * xdisp.c (handle_stop_backwards): Add a prototype.
137 (reseat): call handle_stop_backwards to recompute prev_stop and
138 base_level_stop for the new position. Solves the crash when
139 scrolling backwards.
140
1412010-01-02 Eli Zaretskii <eliz@gnu.org>
142
143 * .gdbinit (pitx): Display some bidi information about the
144 iterator.
145
146 * dispextern.h (BIDI_AT_BASE_LEVEL): Enclose definition in
147 parentheses.
148
149 * xdisp.c (handle_stop_backwards): Save and restore it->current
150 and it->position, instead of expecting the caller to do that.
151 (next_element_from_buffer): When moving across stop_charpos,
152 record it in prev_stop. When IT_CHARPOS backs up, call
153 handle_stop_backwards only if above the base embedding level.
154 This solves the crash while displaying etc/HELLO in bidi mode.
155
1562009-12-26 Eli Zaretskii <eliz@gnu.org>
157
158 * xdisp.c (handle_stop_backwards): Call compute_stop_pos in the
159 loop, instead of calling handle_stop. Call handle_stop only once,
160 after the loop.
161 (next_element_from_buffer): Don't call handle_stop_backwards if at
162 stop position. If base_level_stop is zero, set it to 1.
163
164 * term.c (append_glyph): Fill resolved_level and bidi_type slots
165 of struct glyph for unidirectional display.
166
167 * xdisp.c (set_cursor_from_row): Handle zero-width characters.
168
169 * bidi.c (bidi_mirror_char): More efficient code (suggested by
170 Ehud Karni <ehud@unix.mvs.co.il>). Don't even try to mirror
171 non-ASCII characters.
172
1732009-12-19 Eli Zaretskii <eliz@gnu.org>
174
175 * buffer.c (Fbuffer_swap_text): Swap the values of
176 bidi_display_reordering and bidi_paragraph_direction.
177
178 * bidi.c (bidi_resolve_weak): Fix nesting of conditions for Wn
179 processing. Move W3 after W1 and W2. Simplify W4 because it is
180 now always after W1.
181
182 * .gdbinit (pbiditype): New command.
183 (pgx): Use it to display bidi level and type of the glyph.
184
1852009-12-12 Eli Zaretskii <eliz@gnu.org>
186
187 * dispextern.h (struct it): New members prev_stop and
188 base_level_stop.
189
190 * xdisp.c (handle_stop_backwards): New function.
191 (next_element_from_buffer): Handle the situation where we
192 overstepped stop_charpos due to non-linearity of the bidi
193 iteration. Likewise for when we back up beyond the previous
194 stop_charpos.
195 (reseat_1, pop_it, push_it): Set prev_stop and base_level_stop.
196
197 * dispextern.h (BIDI_AT_BASE_LEVEL): New macro.
198
199 * bidi.c (bidi_copy_it): Fix compiler warning due to cast of a
200 pointer to `int'. Don't preserve the first_elt member, as it is
201 no longer copied, because its position in the structure was
202 changed, see below.
203
204 * dispextern.h (struct bidi_it): Move first_elt, new_paragraph,
205 separator_limit, and paragraph_dir to after bidi_stack. Add a
206 note that anything beyond the level stack is not preserved when
207 the bidi iterator state is copied/saved.
208
2092009-11-21 Eli Zaretskii <eliz@gnu.org>
210
211 * xdisp.c (set_cursor_from_row): Fix cursor positioning on empty
212 lines when integer values of `cursor' property is used on display
213 strings.
214
2152009-11-14 Eli Zaretskii <eliz@gnu.org>
216
217 * xdisp.c (init_iterator, text_outside_line_unchanged_p)
218 (try_window_id): Rename paragraph_direction to
219 bidi_paragraph_direction.
220 (set_cursor_from_row): Handle integer values of `cursor' property
221 on display strings.
222
223 * buffer.c (init_buffer_once, syms_of_buffer): Rename
224 paragraph_direction to bidi_paragraph_direction.
225
226 * buffer.h (struct buffer): Rename paragraph_direction to
227 bidi_paragraph_direction.
228
2292009-11-07 Eli Zaretskii <eliz@gnu.org>
230
231 * bidi.c (bidi_paragraph_init): Don't overstep end of buffer.
232 Treat end of buffer as a NEUTRAL_B character.
233 (bidi_resolve_explicit): Don't special-case ZV when bidi_it->type
234 is NEUTRAL_B, since bidi_set_paragraph_end no longer sets the
235 new_paragraph flag.
236
2372009-10-31 Eli Zaretskii <eliz@gnu.org>
238
239 * xdisp.c (display_line): Always extend reversed_p rows to the end
240 of line.
241 (set_cursor_from_row): In R2L rows that don't display text, put
242 the cursor on the rightmost glyph.
243
2442009-10-24 Eli Zaretskii <eliz@gnu.org>
245
246 * xdisp.c (set_cursor_from_row): Fix off-by-one error when
247 skipping over non-character glyphs at end of a reversed row.
248
249 * dispextern.h (struct glyph): The `resolved_level' member needs
250 only 5 bits, not 6. The `bidi_type' member needs only 3 bits.
251 (bidi_type_t): Rearrange so that types that can appear in the
252 resolved type are at the beginning and have values less than 8.
253
2542009-10-23 Eli Zaretskii <eliz@gnu.org>
255
256 * bidi.c: Include setjmp.h.
257
2582009-10-17 Eli Zaretskii <eliz@gnu.org>
259
260 * dispextern.h (struct glyph): New members resolved_level and
261 bidi_type.
262
263 * xdisp.c (append_glyph, append_composite_glyph)
264 (produce_image_glyph, append_stretch_glyph): Set them.
265
266 * term.c (append_glyph): Ditto.
267
268 * xdisp.c (display_line, next_element_from_buffer): Set the glyph
269 row's reversed_p flag if the paragraph base direction is odd.
270 (extend_face_to_end_of_line): Don't reverse the glyphs here.
271
272 * term.c (append_glyph): Reverse glyphs here.
273
274 * bidi.c (bidi_get_next_char_visually): Don't exit early when at
275 ZV.
276 (bidi_paragraph_init): Don't step over a newline if at BEGV.
277
2782009-10-16 Eli Zaretskii <eliz@gnu.org>
279
280 * bidi.c (bidi_paragraph_init): Handle empty buffers.
281
2822009-10-10 Eli Zaretskii <eliz@gnu.org>
283
284 * xdisp.c (set_cursor_from_row): Skip over glyphs near end of row
285 with integer OBJECT even if their CHARPOS is zero.
286
287 * bidi.c (bidi_cache_iterator_state): Don't cache NEW_PARAGRAPH.
288 Abort if someone tries to add a cached state whose position is not
289 the immediate successor to that of the last cached state.
290 (bidi_paragraph_init): Don't bail out too early after a reseat.
291
2922009-10-09 Eli Zaretskii <eliz@gnu.org>
293
294 * xdisp.c (text_outside_line_unchanged_p, try_window_id): Disable
295 optimizations if we are reordering bidirectional text and the
296 paragraph direction can be affected by the change.
297
2982009-10-08 Eli Zaretskii <eliz@gnu.org>
299
300 * xdisp.c (string_buffer_position_lim): New function.
301 (string_buffer_position): Most of code moved to
302 string_buffer_position_lim. Last argument and return value are
303 now EMACS_INT; all callers changed.
304 (set_cursor_from_row): Rewritten to support bidirectional text and
305 reversed glyph rows.
306
307 dispextern.h <string_buffer_position>: Update prototype.
308
3092009-10-07 Eli Zaretskii <eliz@gnu.org>
310
311 * bidi.c (bidi_paragraph_init): Fix initialization of POS.
312
313 * dispextern.h (struct glyph_row): New member reversed_p.
314
3152009-10-06 Eli Zaretskii <eliz@gnu.org>
316
317 * buffer.c (syms_of_buffer): Remove DEFVAR_LISP_NOPRO for
318 default-direction-reversed, default-bidi-display-reordering, and
319 default-paragraph-direction.
320
3212009-10-05 Eli Zaretskii <eliz@gnu.org>
322
323 * buffer.h (struct buffer): New member paragraph_direction.
324 * buffer.c (init_buffer_once): Initialize it.
325 (syms_of_buffer): Declare Lisp variables
326 default-paragraph-direction and paragraph-direction.
327
328 * dispextern.h (struct it): New member paragraph_embedding.
329 * xdisp.c (init_iterator): Initialize it from the buffer's value
330 of paragraph-direction.
331 <Qright_to_left, Qleft_to_right>: New variables.
332 (syms_of_xdisp): Initialize and staticpro them.
333 (set_iterator_to_next, next_element_from_buffer): Use the value of
334 paragraph_embedding to determine the paragraph direction.
335
336 * bidi.c (bidi_line_init): Fix second argument to
337 bidi_set_sor_type.
338 (bidi_init_it): Initialize paragraph_dir to NEUTRAL_DIR.
339 (bidi_get_next_char_visually): Record the last character of the
340 separator in separator_limit, not the character after that.
341 (bidi_find_paragraph_start): Accept character and byte positions
342 instead of the whole iterator stricture. All callers changed.
343
3442009-10-04 Eli Zaretskii <eliz@gnu.org>
345
346 * bidi.c (bidi_at_paragraph_end): Check for paragraph-start if
347 paragraph-separate failed to match. Return the length of the
348 matched separator.
349 (bidi_line_init): New function.
350 (bidi_paragraph_init): Use bidi_line_init. Do nothing if in the
351 middle of a paragraph-separate sequence. Don't override existing
352 paragraph direction if no strong characters found in this
353 paragraph. Set separator_limit according to what
354 bidi_at_paragraph_end returns. Reset new_paragraph flag when a
355 new paragraph is found.
356 (bidi_init_it): Reset separator_limit.
357
358 * dispextern.h (struct bidi_it): New member separator_limit.
359
360 * bidi.c (bidi_find_paragraph_start): Return the byte position of
361 the paragraph beginning.
362
363 * xdisp.c (set_iterator_to_next): Call bidi_paragraph_init if the
364 new_paragraph flag is set in the bidi iterator.
365
366 * bidi.c (bidi_at_paragraph_end, bidi_find_paragraph_start): Use
367 the buffer-local value of paragraph-start and paragraph-separate.
368
3692009-10-03 Eli Zaretskii <eliz@gnu.org>
370
371 * bidi.c (bidi_set_paragraph_end): Don't set the new_paragraph
372 flag in the iterator.
373 (bidi_init_it): Set the new_paragraph flag.
374 (bidi_at_paragraph_end): Arguments are now character and byte
375 position of the next character. All callers changed.
376 (bidi_resolve_explicit): Don't call bidi_at_paragraph_end, and
377 don't behave as if at paragraph end if it returns true.
378 (bidi_get_next_char_visually): Don't call bidi_paragraph_init if
379 new_paragraph flags is set. Set new_paragraph flag when at end of
380 a paragraph.
381 <fallback_paragraph_start_re, fallback_paragraph_separate_re>: New
382 variables.
383 <Qparagraph_start, Qparagraph_separate>: New variables.
384 (bidi_initialize): Initialize and staticpro them.
385
386 * dispextern.h <struct bidi_it>: New element paragraph_dir. Make
387 positional elements EMACS_INT.
388
389 * bidi.c <bidi_overriding_paragraph_direction>: Delete.
390
3912009-09-28 Eli Zaretskii <eliz@gnu.org>
392
393 * bidi.c (bidi_init_it): Initialize charpos, bytepos, and
394 first_elt before calling bidi_set_paragraph_end.
395 (bidi_resolve_explicit): Don't call bidi_set_paragraph_end at
396 EOB.
397 (bidi_at_paragraph_end): Don't set new_paragraph flag at EOB.
398 (bidi_get_type): Accept an additional argument OVERRIDE, per UAX#9
399 "Explicit Overrides". All callers changed.
400
4012009-09-27 Eli Zaretskii <eliz@gnu.org>
402
403 * xdisp.c (next_element_from_buffer): If called not at line
404 beginning, start bidi iteration from line beginning.
405
406 * bidi.c (bidi_paragraph_init): Use
407 bidi_overriding_paragraph_direction instead of a literal zero.
408 (bidi_initialize): Fix some character types, per Unicode 5.x.
409 (bidi_get_type): Abort if called with invalid character code.
410
411 * dispextern.h: Add prototype of bidi_mirror_char.
412
413 * xdisp.c (get_next_display_element): Mirror characters whose
414 resolved type is STRONG_R.
415
4162009-09-26 Eli Zaretskii <eliz@gnu.org>
417
418 * bidi.c (bidi_paragraph_init): Don't set bidi_it->ch_len. Abort
419 if called not at beginning of a new paragraph.
420 (bidi_get_next_char_visually): Prepare and use a sentinel iterator
421 state when first_elt flag is set.
422
423 * dispextern.h (struct bidi_it): New struct member first_elt.
424
425 * bidi.c (bidi_init_it): Initialize bidi_it->first_elt.
426 (bidi_copy_it): Don't copy the first_elt flag.
427
428 * xdisp.c (reseat_1): Initialize bidi_it.first_elt. Move bidi
429 scan start code from here...
430 (next_element_from_buffer): ...to here. Use bidi_it.first_elt
431 flag.
432
4332009-09-20 Eli Zaretskii <eliz@gnu.org>
434
435 * xdisp.c (reseat_1): Handle position < BEGV.
436
437 * bidi.c (bidi_paragraph_init): Set bidi_it->ch_len. Handle ZV.
438 (bidi_init_it): Don't initialize bidi_it->ch_len.
439 (bidi_resolve_explicit_1): Abort if bidi_it->ch_len was not
440 initialized.
441 (bidi_at_paragraph_end, bidi_resolve_explicit_1)
442 (bidi_resolve_weak, bidi_level_of_next_char): Handle bytepos at
443 ZV_BYTE.
444 (bidi_resolve_explicit_1): Handle position < BEGV.
445
4462009-09-19 Eli Zaretskii <eliz@gnu.org>
447
448 * xdisp.c (init_iterator): Call bidi_init_it. Set
449 bidi_it->bytepos if buffer position specified.
450 (reseat_1): Don't call bidi_init_it. Call bidi_paragraph_init
451 instead. Move back to preceding character before the call to
452 bidi_get_next_char_visually.
453
454 * bidi.c: Remove all STANDALONE parts.
455 (bidi_init_it): Init bidi_it->charpos and bidi_it->bytepos to -1.
456 Don't call bidi_paragraph_init. Change arguments.
457 (bidi_paragraph_init): Remove code for negative pos.
458
459 * dispextern.h <bidi_it>: Rename orig_type to type_after_w1 and
460 pristine_type to orig_type.
461
4622009-09-12 Eli Zaretskii <eliz@gnu.org>
463
464 * dispnew.c (direct_output_for_insert): Give up if we are
465 reordering bidirectional text.
466
467 * dispextern.h (IT_STACK_SIZE): Enlarge to 5.
468
469 * xdisp.c (display_line): Set row->end and it->start for the next
470 row to the next character in logical order. If we are reordering
471 bidi text, push and pop the iterator before and after momentarily
472 iterating in logical order.
473
4742009-09-11 Eli Zaretskii <eliz@gnu.org>
475
476 Note: The following changes were undone on 2009-09-12.
477
478 * xdisp.c (set_iterator_to_next, reseat, reseat_1)
479 (reseat_at_next_visible_line_start): Accept additional argument
480 force_logical_p; all callers changed. If force_logical_p is
481 non-zero, force iteration in buffer's logical order even in bidi
482 buffers.
483
484 * dispnew.c (direct_output_for_insert): Call set_iterator_to_next
485 with additional argument zero.
486
487 * dispextern.h (set_iterator_to_next): Now accepts an additional
488 argument.
489
4902009-08-29 Eli Zaretskii <eliz@gnu.org>
491
492 * xdisp.c (set_cursor_from_row): Don't assume glyph->charpos
493 increments linearly.
494 (try_window_reusing_current_matrix): Don't assume glyph->charpos
495 increments linearly.
496
4972009-08-28 Eli Zaretskii <eliz@gnu.org>
498
499 * bidi.c <bidi_overriding_paragraph_direction>: Default to L2R,
500 for now.
501
5022009-08-22 Eli Zaretskii <eliz@gnu.org>
503
504 * bidi.c (bidi_initialize): staticpro bidi_char_table.
505 (bidi_check_type): New function.
506 (bidi_cache_iterator_state, bidi_remember_char)
507 (bidi_resolve_explicit_1, bidi_resolve_explicit)
508 (bidi_resolve_weak, bidi_resolve_neutral)
509 (bidi_level_of_next_char): Use it to validate the bidi type
510 assigned to the iterator.
511
5122009-08-15 Eli Zaretskii <eliz@gnu.org>
513
514 * bidi.c (bidi_initialize): Fix initialization of bidi_type_table.
515
516 * xdisp.c (set_iterator_to_next): Fix position setting after call
517 to bidi_get_next_char_visually.
518
5192005-12-03 Eli Zaretskii <eliz@gnu.org>
520
521 * bidi.c: Include stdio.h unconditionally. Fix and elaborate
522 commentary. Add Copyright blurb.
523
5242004-03-08 Kenichi Handa <handa@m17n.org>
525
526 * xdisp.c (reseat_1): Call bidi_init_it with a previous position.
527
528 * bidi.c (bidi_init_it): Set bidi_it->ch_len even if POS > 0.
529
5302004-03-04 Kenichi Handa <handa@m17n.org>
531
532 The following changes are to support bidirectional text display.
533
534 * Makefile.in (obj): Include bidi.o.
535 (bidi.o): New target.
536
537 * bidi.c: New file.
538
539 * buffer.h (struct buffer): New member bidi_display_reordering.
540
541 * buffer.c (init_buffer_once): Initialize bidi_display_reordering.
542 (syms_of_buffer): Declarations of Lisp variables
543 default-bidi-display-reordering and bidi-display-reordering.
544
545 * dispextern.h (BIDI_MAXLEVEL): New macro.
546 (bidi_type_t, bidi_dir_t): New types.
547 (bidi_saved_info, bidi_stack, bidi_it): New structs.
548 (struct it): New members bidi_p and bidi_it.
549 (bidi_init_it): Extern it.
550 (bidi_get_next_char_visually): Extern it.
551
552 * dispnew.c (direct_output_forward_char): Give up if we need bidi
553 processing or buffer's direction is right-to-left.
554
555 * xdisp.c (init_iterator): Initialize it->bidi_p.
556 (reseat_1): Cal bidi_init_it and bidi_get_next_char_visually if
557 necessary.
558 (set_iterator_to_next): Cal bidi_get_next_char_visually if
559 necessary.
560
561
562;; Local Variables:
563;; coding: utf-8
564;; add-log-time-zone-rule: t
565;; End:
566
567 Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc.
568
569 This file is part of GNU Emacs.
570
571 GNU Emacs is free software: you can redistribute it and/or modify
572 it under the terms of the GNU General Public License as published by
573 the Free Software Foundation, either version 3 of the License, or
574 (at your option) any later version.
575
576 GNU Emacs is distributed in the hope that it will be useful,
577 but WITHOUT ANY WARRANTY; without even the implied warranty of
578 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
579 GNU General Public License for more details.
580
581 You should have received a copy of the GNU General Public License
582 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.