Merge from trunk.
This commit is contained in:
commit
2573a8376a
36 changed files with 2053 additions and 500 deletions
|
@ -1,4 +1,4 @@
|
|||
2011-07-14 Paul Eggert <eggert@cs.ucla.edu>
|
||||
2011-07-28 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Assume freestanding C89 headers, string.h, stdlib.h.
|
||||
Again, this simplifies the code, and all current platforms have these.
|
||||
|
@ -13,6 +13,12 @@
|
|||
can add the gnulib modules for these (a 1-line change to Makefile.in).
|
||||
* configure.in: Don't check for memcmp, memcpy, memmove, memset.
|
||||
|
||||
2011-07-27 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* GNUmakefile: New file.
|
||||
This is for convenience, so that one can run GNU make in an
|
||||
unconfigured source tree, and get a default build.
|
||||
|
||||
2011-07-13 Jan Djärv <jan.h.d@swipnet.se>
|
||||
|
||||
* configure.in (GSETTINGS): Check for gio-2.0 >= 2.26.
|
||||
|
|
77
GNUmakefile
Normal file
77
GNUmakefile
Normal file
|
@ -0,0 +1,77 @@
|
|||
# Build Emacs from a fresh tarball or version-control checkout.
|
||||
|
||||
# Copyright 2011 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is part of GNU Emacs.
|
||||
#
|
||||
# GNU Emacs 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 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# GNU Emacs is distributed in the hope that 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 GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# written by Paul Eggert
|
||||
|
||||
|
||||
# This GNUmakefile is for GNU Make. It is for convenience, so that
|
||||
# one can run 'make' in an unconfigured source tree. In such a tree,
|
||||
# this file causes GNU Make to first create a standard configuration
|
||||
# with the default options, and then reinvokes itself on the
|
||||
# newly-built Makefile. If the source tree is already configured,
|
||||
# this file defers to the existing Makefile.
|
||||
|
||||
# If you are using a non-GNU 'make', or if you want non-default build
|
||||
# options, or if you want to build in an out-of-source tree, please
|
||||
# run "configure" by hand. But run autogen.sh first, if the source
|
||||
# was checked out directly from the repository.
|
||||
|
||||
|
||||
# If a Makefile already exists, just use it.
|
||||
|
||||
ifeq ($(wildcard Makefile),Makefile)
|
||||
include Makefile
|
||||
else
|
||||
|
||||
# If cleaning and Makefile does not exist, don't bother creating it.
|
||||
# The source tree is already clean, or is in a weird state that
|
||||
# requires expert attention.
|
||||
|
||||
ifeq ($(filter-out %clean,$(or $(MAKECMDGOALS),default)),)
|
||||
|
||||
$(MAKECMDGOALS):
|
||||
@echo >&2 'No Makefile; skipping $@.'
|
||||
|
||||
else
|
||||
|
||||
# No Makefile, and not cleaning.
|
||||
# If 'configure' does not exist, Emacs must have been checked
|
||||
# out directly from the repository; run ./autogen.sh.
|
||||
# Once 'configure' exists, run it.
|
||||
# Finally, run the actual 'make'.
|
||||
|
||||
default $(filter-out configure Makefile,$(MAKECMDGOALS)): Makefile
|
||||
$(MAKE) -f Makefile $(MAKECMDGOALS)
|
||||
# Execute in sequence, so that multiple user goals don't conflict.
|
||||
.NOTPARALLEL:
|
||||
|
||||
configure:
|
||||
@echo >&2 'There seems to be no "configure" file in this directory.'
|
||||
@echo >&2 'Running ./autogen.sh || autogen/copy_autogen ...'
|
||||
./autogen.sh || autogen/copy_autogen
|
||||
@echo >&2 '"configure" file built.'
|
||||
|
||||
Makefile: configure
|
||||
@echo >&2 'There seems to be no Makefile in this directory.'
|
||||
@echo >&2 'Running ./configure ...'
|
||||
./configure
|
||||
@echo >&2 'Makefile built.'
|
||||
|
||||
endif
|
||||
endif
|
|
@ -1,3 +1,7 @@
|
|||
2011-07-23 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* display.texi (Bidirectional Display): New section.
|
||||
|
||||
2011-07-16 Lars Magne Ingebrigtsen <larsi@gnus.org>
|
||||
Tim Cross <theophilusx@gmail.com> (tiny change)
|
||||
Glenn Morris <rgm@gnu.org>
|
||||
|
|
|
@ -34,6 +34,8 @@ that Emacs presents to the user.
|
|||
* Display Tables:: How to specify other conventions.
|
||||
* Beeping:: Audible signal to the user.
|
||||
* Window Systems:: Which window system is being used.
|
||||
* Bidirectional Display:: Display of bidirectional scripts, such as
|
||||
Arabic and Farsi.
|
||||
@end menu
|
||||
|
||||
@node Refresh Screen
|
||||
|
@ -5966,3 +5968,131 @@ This hook is used for internal purposes: setting up communication with
|
|||
the window system, and creating the initial window. Users should not
|
||||
interfere with it.
|
||||
@end defvar
|
||||
|
||||
@node Bidirectional Display
|
||||
@section Bidirectional Display
|
||||
@cindex bidirectional display
|
||||
@cindex right-to-left text
|
||||
|
||||
Emacs can display text written in scripts, such as Arabic, Farsi,
|
||||
and Hebrew, whose natural ordering of horizontal text for display is
|
||||
from right to left. However, digits and Latin text embedded in these
|
||||
scripts are still displayed left to right. It is also not uncommon to
|
||||
have small portions of text in Arabic or Hebrew embedded in otherwise
|
||||
Latin document, e.g., as comments and strings in a program source
|
||||
file. Likewise, small portions of Latin text can be embedded in an
|
||||
Arabic or Farsi document. For these reasons, text that uses these
|
||||
scripts is actually @dfn{bidirectional}: a mixture of runs of
|
||||
left-to-right and right-to-left characters.
|
||||
|
||||
This section describes the facilities and options provided by Emacs
|
||||
for editing and displaying bidirectional text.
|
||||
|
||||
@cindex logical order
|
||||
@cindex visual order
|
||||
@cindex unicode bidirectional algorithm
|
||||
Emacs stores right-to-left and bidirectional text in the so-called
|
||||
@dfn{logical} (or @dfn{reading}) order: the buffer or string position
|
||||
of the first character you read precedes that of the next character.
|
||||
Reordering of bidirectional text into the @dfn{visual} order happens
|
||||
at display time. As result, character positions no longer increase
|
||||
monotonically with their positions on display. Emacs implements the
|
||||
Unicode Bidirectional Algorithm (a.k.a.@: @acronym{UBA}) described in
|
||||
the Unicode Standard Annex #9, for reordering of bidirectional text
|
||||
for display. Reordering of bidirectional text for display in Emacs is
|
||||
a ``Full bidirectionality'' class implementation of the @acronym{UBA}.
|
||||
|
||||
@defvar bidi-display-reordering
|
||||
The buffer-local variable @code{bidi-display-reordering} controls
|
||||
whether text in the buffer is reordered for display. If its value is
|
||||
non-@code{nil}, Emacs reorders characters that have right-to-left
|
||||
directionality when they are displayed. The default value is
|
||||
@code{nil}. Text in overlay strings (@pxref{Overlay
|
||||
Properties,,before-string}), display strings (@pxref{Overlay
|
||||
Properties,,display}), and @code{display} text properties
|
||||
(@pxref{Display Property}) is also reordered if the buffer whose text
|
||||
includes these strings is reordered for display. Turning off
|
||||
@code{bidi-display-reordering} for a buffer turns off reordering of
|
||||
all the overlay and display strings in that buffer.
|
||||
|
||||
Reordering of strings that are unrelated to any buffer, such as text
|
||||
displayed on the mode line (@pxref{Mode Line Format}) or header line
|
||||
(@pxref{Header Lines}), is controlled by the default value of
|
||||
@code{bidi-display-reordering}.
|
||||
@end defvar
|
||||
|
||||
@cindex unibyte buffers, and bidi reordering
|
||||
Emacs does not reorder text in unibyte buffers, even if
|
||||
@code{bidi-display-reordering} is non-@code{nil} in such a buffer.
|
||||
This is because unibyte buffers contain raw bytes, not characters, and
|
||||
thus don't have bidirectional properties defined for them which are
|
||||
required for correct reordering. Therefore, to test whether text in a
|
||||
buffer will be reordered for display, it is not enough to test the
|
||||
value of @code{bidi-display-reordering} alone. The correct test is
|
||||
this:
|
||||
|
||||
@example
|
||||
(if (and enable-multibyte-characters
|
||||
bidi-display-reordering)
|
||||
;; Buffer is being reordered for display
|
||||
)
|
||||
@end example
|
||||
|
||||
In contrast to unibyte buffers, unibyte display and overlay strings
|
||||
@emph{are} reordered, if their parent buffer is reordered. This is
|
||||
because plain-@sc{ascii} strings are stored by Emacs as unibyte
|
||||
strings. If a unibyte display or overlay string includes
|
||||
non-@sc{ascii} characters, these characters are assumed to have
|
||||
left-to-right direction.
|
||||
|
||||
@cindex display properties, and bidi reordering of text
|
||||
Text covered by @code{display} text properties, by overlays with
|
||||
@code{display} properties whose value is a string, and by any other
|
||||
properties that replace buffer text, is treated as a single unit when
|
||||
it is reordered for display. That is, the entire chunk of text
|
||||
covered by these properties is reordered together. Moreover, the
|
||||
bidirectional properties of the characters in this chunk of text are
|
||||
ignored, and Emacs reorders them as if they were replaced with a
|
||||
single character @code{u+FFFC}, known as the @dfn{Object Replacement
|
||||
Character}. This means that placing a display property over a portion
|
||||
of text may change the way that the surrounding text is reordered for
|
||||
display. To prevent this unexpected effect, always place such
|
||||
properties on text whose directionality is identical with text that
|
||||
surrounds it.
|
||||
|
||||
@cindex base direction of a paragraph
|
||||
Each paragraph of bidirectional text can have its own @dfn{base
|
||||
direction}, either right-to-left or left-to-right. Text in
|
||||
left-to-right paragraphs is displayed beginning at the left margin of
|
||||
the window and is truncated or continued when it reaches the right
|
||||
margin. By contrast, display of text in right-to-left paragraphs
|
||||
begins at the right margin and is continued or truncated at the left
|
||||
margin.
|
||||
|
||||
@defvar bidi-paragraph-direction
|
||||
Emacs determines the base direction of each paragraph dynamically,
|
||||
based on the text at the beginning of the paragraph. The precise
|
||||
method of determining the base direction is specified by the
|
||||
@acronym{UBA}; in a nutshell, the first character in a paragraph that
|
||||
has an explicit directionality determines the base direction of the
|
||||
paragraph. However, sometimes a buffer may need to force a certain
|
||||
base direction for its paragraphs. For example, a buffer that visits
|
||||
a source code of a program should force all its paragraphs to be
|
||||
displayed left to right. The variable
|
||||
@code{bidi-paragraph-direction}, if non-@code{nil}, disables the
|
||||
dynamic determination of the base direction, and instead forces all
|
||||
paragraphs in the buffer to have the direction specified by its
|
||||
buffer-local value. The value can be either @code{right-to-left} or
|
||||
@code{left-to-right}. Any other value is interpreted as @code{nil}.
|
||||
@end defvar
|
||||
|
||||
@defun current-bidi-paragraph-direction &optional buffer
|
||||
This function returns the paragraph direction at point in the named
|
||||
@var{buffer}. The returned value is a symbol, either
|
||||
@code{left-to-right} or @code{right-to-left}. If @var{buffer} is
|
||||
omitted or @code{nil}, it defaults to the current buffer. If the
|
||||
buffer-local value of the variable @code{bidi-paragraph-direction} is
|
||||
non-@code{nil}, the returned value will be identical to that value;
|
||||
otherwise, the returned value reflects the paragraph direction
|
||||
determined dynamically by Emacs.
|
||||
@end defun
|
||||
|
|
|
@ -1,3 +1,10 @@
|
|||
2011-07-23 Yair F <yair.f.lists@gmail.com>
|
||||
|
||||
* quail/hebrew.el ("hebrew"): Additional key mappings.
|
||||
("hebrew-new", "hebrew-lyx", "hebrew-full")
|
||||
("hebrew-biblical-tiro", "hebrew-biblical-sil", "yiddish-royal")
|
||||
("yiddish-keyman"): New input methods.
|
||||
|
||||
2011-06-12 Andreas Schwab <schwab@linux-m68k.org>
|
||||
|
||||
* SKK-DIC/SKK-JISYO.L: Add proper coding tag.
|
||||
|
|
|
@ -1,11 +1,14 @@
|
|||
;;; hebrew.el --- Quail package for inputting Hebrew characters -*-coding: iso-2022-7bit;-*-
|
||||
;; hebrew.el --- Quail package for inputting Hebrew characters -*-coding: iso-2022-7bit;-*-
|
||||
|
||||
;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
|
||||
;; 2008, 2009, 2010, 2011
|
||||
;; National Institute of Advanced Industrial Science and Technology (AIST)
|
||||
;; Registration Number H14PRO021
|
||||
|
||||
;; Keywords: mule, input method, Hebrew
|
||||
;; Many input methods in this file provided
|
||||
;; by Yair Friedman <yair.f.lists@gmail.com>
|
||||
|
||||
;; Keywords: multilingual, input method, Hebrew
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
|
||||
|
@ -29,50 +32,851 @@
|
|||
(require 'quail)
|
||||
|
||||
(quail-define-package
|
||||
"hebrew" "Hebrew" ",Hr(B" nil "Hebrew (ISO 8859-8) input method.
|
||||
"hebrew" "Hebrew" ",Hr(B" nil "Hebrew SI-1452 input method.
|
||||
|
||||
Based on Hebrew typewriter keys.
|
||||
Hebrew letters are assigned to lowercases.
|
||||
Based on SI-1452 keyboard layout.
|
||||
Only Hebrew-related characters are considered.
|
||||
'q' is used to switch levels instead of Alt-Gr.
|
||||
Maqaaf ($,1,^(B) is mapped to '/,Ht(B'.
|
||||
" nil t t t t nil nil nil nil nil t)
|
||||
|
||||
;; 1! 2@ 3# 4$ 5% 6^ 7& 8* 9( 0) -_ =+ ;~
|
||||
;; /Q 'W ,Hw(BE ,Hx(BR ,H`(BT ,Hh(BY ,He(BU ,Ho(BI ,Hm(BO ,Ht(BP [{ ]}
|
||||
;; ,Hy(BA ,Hc(BS ,Hb(BD ,Hk(BF ,Hr(BG ,Hi(BH ,Hg(BJ ,Hl(BK ,Hj(BL ,Hs(B: ," \|
|
||||
;; ,Hf(BZ ,Hq(BX ,Ha(BC ,Hd(BV ,Hp(BB ,Hn(BN ,Hv(BM ,Hz(B< ,Hu(B> .?
|
||||
;;
|
||||
|
||||
(quail-define-rules
|
||||
("`" ?\;)
|
||||
("w" ?\')
|
||||
("e" ?,Hw(B) ; Qof
|
||||
("r" ?,Hx(B) ; Resh
|
||||
("t" ?,H`(B) ; Alef
|
||||
("y" ?,Hh(B) ; Tet
|
||||
("u" ?,He(B) ; Vav
|
||||
("i" ?,Ho(B) ; Final Nun
|
||||
("o" ?,Hm(B) ; Final Mem
|
||||
("p" ?,Ht(B) ; Pe
|
||||
("[" ?\]) ; mirroring
|
||||
("]" ?\[) ; mirroring
|
||||
("a" ?,Hy(B) ; Shin
|
||||
("s" ?,Hc(B) ; Dalet
|
||||
("d" ?,Hb(B) ; Gimel
|
||||
("f" ?,Hk(B) ; Kaf
|
||||
("g" ?,Hr(B) ; Ayin
|
||||
("h" ?,Hi(B) ; Yod
|
||||
("j" ?,Hg(B) ; Het
|
||||
("k" ?,Hl(B) ; Lamed
|
||||
("l" ?,Hj(B) ; Final Kaf
|
||||
(";" ?,Hs(B) ; Final Pe
|
||||
("'" ?,)
|
||||
("z" ?,Hf(B) ; Zayin
|
||||
("x" ?,Hq(B) ; Samekh
|
||||
("c" ?,Ha(B) ; Bet
|
||||
("v" ?,Hd(B) ; He
|
||||
("b" ?,Hp(B) ; Nun
|
||||
("n" ?,Hn(B) ; Mem
|
||||
("m" ?,Hv(B) ; Tsadi
|
||||
("," ?,Hz(B) ; Tav
|
||||
("." ?,Hu(B) ; Final Tsadi
|
||||
("/" ?.) ; Stop
|
||||
("(" ?\)) ; mirroring
|
||||
(")" ?\() ; mirroring
|
||||
("{" ?}) ; mirroring
|
||||
("}" ?{) ; mirroring
|
||||
("<" ?>) ; mirroring
|
||||
(">" ?<) ; mirroring
|
||||
("q`" ?$,1,P(B) ; Sheva
|
||||
("q1" ?$,1,Q(B) ; Hataf Segol
|
||||
("q2" ?$,1,R(B) ; Hataf Patah
|
||||
("q3" ?$,1,S(B) ; Hataf Qamats
|
||||
("q4" ?$,1,T(B) ; Hiriq
|
||||
("q5" ?$,1,U(B) ; Tsere
|
||||
("q6" ?$,1,V(B) ; Segol (Point)
|
||||
("q7" ?$,1,W(B) ; Patah
|
||||
("q8" ?$,1,X(B) ; Qamats
|
||||
("q9" ?$,1,b(B) ; Sin dot
|
||||
("q0" ?$,1,a(B) ; Shin dot
|
||||
("q-" ?$,1,Y(B) ; Holam
|
||||
("q=" ?$,1,\(B) ; Dagesh or Mapiq
|
||||
("q\\" ?$,1,[(B) ; Qubuts
|
||||
("qq" ?/)
|
||||
("qw" ?$,1-3(B) ; Geresh (Punct.)
|
||||
("qi" ?$,1-0(B) ; Yiddish Double Vav
|
||||
("qp" ?$,1,^(B) ; Maqaf
|
||||
("q[" ?$,1,_(B) ; Rafe
|
||||
("q]" ?$,1,](B) ; Meteg
|
||||
("qa" ?$,1tJ(B) ; New Sheqel sign
|
||||
("qh" ?$,1-2(B) ; Yiddish Double Yod
|
||||
("qj" ?$,1-1(B) ; Yiddish Vav Yod
|
||||
("q\"" ?$,1-4(B) ; Gershayim (Punct.)
|
||||
("q," ?\u200E) ; LRM
|
||||
("q." ?\u200F) ; RLM
|
||||
)
|
||||
|
||||
(quail-define-package
|
||||
"hebrew-new" "Hebrew" ",Hr(B" nil "Hebrew SI-1452 new draft input method.
|
||||
|
||||
Based on latest draft of SI-1452 keyboard layout.
|
||||
Only Hebrew-related characters are considered.
|
||||
'`' is used to switch levels instead of Alt-Gr.
|
||||
Geresh is mapped to '`k'.
|
||||
" nil t t t t nil nil nil nil nil t)
|
||||
|
||||
(quail-define-rules
|
||||
("q" ?/)
|
||||
("w" ?\')
|
||||
("e" ?,Hw(B) ; Qof
|
||||
("r" ?,Hx(B) ; Resh
|
||||
("t" ?,H`(B) ; Alef
|
||||
("y" ?,Hh(B) ; Tet
|
||||
("u" ?,He(B) ; Vav
|
||||
("i" ?,Ho(B) ; Final Nun
|
||||
("o" ?,Hm(B) ; Final Mem
|
||||
("p" ?,Ht(B) ; Pe
|
||||
("[" ?\]) ; mirroring
|
||||
("]" ?\[) ; mirroring
|
||||
("a" ?,Hy(B) ; Shin
|
||||
("s" ?,Hc(B) ; Dalet
|
||||
("d" ?,Hb(B) ; Gimel
|
||||
("f" ?,Hk(B) ; Kaf
|
||||
("g" ?,Hr(B) ; Ayin
|
||||
("h" ?,Hi(B) ; Yod
|
||||
("j" ?,Hg(B) ; Het
|
||||
("k" ?,Hl(B) ; Lamed
|
||||
("l" ?,Hj(B) ; Final Kaf
|
||||
(";" ?,Hs(B) ; Final Pe
|
||||
("'" ?,)
|
||||
("z" ?,Hf(B) ; Zayin
|
||||
("x" ?,Hq(B) ; Samekh
|
||||
("c" ?,Ha(B) ; Bet
|
||||
("v" ?,Hd(B) ; He
|
||||
("b" ?,Hp(B) ; Nun
|
||||
("n" ?,Hn(B) ; Mem
|
||||
("m" ?,Hv(B) ; Tsadi
|
||||
("," ?,Hz(B) ; Tav
|
||||
("." ?,Hu(B) ; Final Tsadi
|
||||
("/" ?.) ; Stop
|
||||
("(" ?\)) ; mirroring
|
||||
(")" ?\() ; mirroring
|
||||
("{" ?}) ; mirroring
|
||||
("}" ?{) ; mirroring
|
||||
("<" ?>) ; mirroring
|
||||
(">" ?<) ; mirroring
|
||||
|
||||
("``" ?\;)
|
||||
("`1" ?$,1,](B) ; Meteg
|
||||
;("`2" ??) ; Unassigned
|
||||
("`3" ?,F$(B) ; Euro Sign
|
||||
("`4" ?$,1tJ(B) ; New Sheqel sign
|
||||
("`5" ?,A0(B) ; Degree Sign
|
||||
("`6" ?$,1,K(B) ; Ole
|
||||
;("`7" ??) ; Unassigned
|
||||
("`8" ?,AW(B) ; Multiplication Sign
|
||||
("`9" ?\u200E) ; LRM
|
||||
("`0" ?\u200F) ; RLM
|
||||
("`-" ?$,1,^(B) ; Maqaf
|
||||
("`=" ?$(G!9(B) ; En Dash
|
||||
("`q" ?$,1,b(B) ; Sin dot
|
||||
("`w" ?$,1,a(B) ; Shin dot
|
||||
("`e" ?$,1,X(B) ; Qamats
|
||||
("`r" ?$,1,S(B) ; Hataf Qamats
|
||||
;("`t" ??) ; Unassigned
|
||||
("`y" ?$,1-0(B) ; Yiddish Double Vav
|
||||
("`u" ?$,1,Y(B) ; Holam
|
||||
;("`i" ??) ; Unassigned
|
||||
;("`o" ??) ; Unassigned
|
||||
("`p" ?$,1,W(B) ; Patah
|
||||
("`[" ?$,1,R(B) ; Hataf Patah
|
||||
("`]" ?$,1,_(B) ; Rafe
|
||||
("`\\" ?$,1,[(B) ; Qubuts
|
||||
("`a" ?$,1,P(B) ; Sheva
|
||||
("`s" ?$,1,\(B) ; Dagesh or Mapiq
|
||||
;("`d" ??) ; Unassigned
|
||||
;("`f" ??) ; Unassigned
|
||||
("`g" ?$,1-1(B) ; Yiddish Vav Yod
|
||||
("`h" ?$,1-2(B) ; Yiddish Double Yod
|
||||
("`j" ?$,1,T(B) ; Hiriq
|
||||
("`k" ?$,1-3(B) ; Geresh (Punct.)
|
||||
("`l" ?,Y4(B) ; Left Double Quotation Mark
|
||||
("`;" ?,Y!(B) ; Right Double Quotation Mark
|
||||
("`'" ?$,1-4(B) ; Gershayim (Punct.)
|
||||
;("`z" ??) ; Unassigned
|
||||
("`x" ?$,1,V(B) ; Segol (Point)
|
||||
("`c" ?$,1,Q(B) ; Hataf Segol
|
||||
;("`v" ??) ; Unassigned
|
||||
;("`b" ??) ; Unassigned
|
||||
;("`n" ??) ; Unassigned
|
||||
("`m" ?$,1,U(B) ; Tsere
|
||||
;("`," ??) ; Unassigned
|
||||
;("`." ??) ; Unassigned
|
||||
("`/" ?,Aw(B) ; Division Sign
|
||||
|
||||
("``" ?$,1,c(B) ; Sof Pasuq
|
||||
("`!" ?$,1,1(B) ; Etnahta
|
||||
("`@" ?$,1,2(B) ; Segol (Accent)
|
||||
("`#" ?$,1,3(B) ; Shalshelet
|
||||
("`$" ?$,1,4(B) ; Zaqef Qatan
|
||||
("`%" ?$,1,5(B) ; Zaqef Gadol
|
||||
("`^" ?$,1,6(B) ; Tipeha
|
||||
("`&" ?$,1,7(B) ; Revia
|
||||
("`*" ?$,1,8(B) ; Zarqa
|
||||
("`(" ?$,1,9(B) ; Pashta
|
||||
("`)" ?$,1,:(B) ; Yetiv
|
||||
("`_" ?$,1,;(B) ; Tevir
|
||||
("`+" ?$,1,<(B) ; Geresh (Accent)
|
||||
("`Q" ?$,1,=(B) ; Geresh Muqdam
|
||||
("`W" ?$,1,>(B) ; Gershayim (Accent)
|
||||
("`E" ?$,1,g(B) ; Qamats Qatan
|
||||
("`R" ?$,1,?(B) ; Qarney Para
|
||||
("`T" ?$,1,@(B) ; Telisha Gedola
|
||||
("`Y" ?$,1,A(B) ; Pazer
|
||||
("`U" ?$,1,Z(B) ; Holam Haser for Vav
|
||||
("`I" ?$,1,B(B) ; Atnah Hafukh
|
||||
("`O" ?$,1,C(B) ; Munah
|
||||
;("`P" ??) ; Reserved
|
||||
("`{" ?$,1,D(B) ; Mahapakh
|
||||
("`}" ?$,1,E(B) ; Merkha
|
||||
("`|" ?$,1,F(B) ; Merkha Kefula
|
||||
;("`A" ??) ; Reserved
|
||||
;("`S" ??) ; Reserved
|
||||
("`D" ?$,1,G(B) ; Darga
|
||||
("`F" ?$,1,H(B) ; Qadma
|
||||
("`G" ?$,1,I(B) ; Telisha Qetana
|
||||
("`H" ?$,1,J(B) ; Yerah Ben Yomo
|
||||
("`J" ?\u200D) ; ZWJ
|
||||
("`K" ?$,1,L(B) ; Iluy
|
||||
("`L" ?,Y4(B) ; Left Double Quotation Mark (2nd)
|
||||
("`:" ?,Y%(B) ; Double Low-9 Quotation Mark
|
||||
("`\"" ?$,1,M(B) ; Dehi
|
||||
("`Z" ?$,1,N(B) ; Zinor
|
||||
("`X" ?$,1,O(B) ; Masora Circle
|
||||
("`C" ?\u034F) ; CGJ
|
||||
("`V" ?$,1,`(B) ; Paseq
|
||||
("`B" ?$,1,f(B) ; Nun Hafukha
|
||||
("`N" ?\u200C) ; ZWNJ
|
||||
;("`M" ??) ; Unassigned
|
||||
;("`<" ??) ; Unassigned
|
||||
("`>" ?$,1,e(B) ; Lower Dot
|
||||
("`?" ?$,1,d(B) ; Upper Dot
|
||||
)
|
||||
|
||||
(quail-define-package
|
||||
"hebrew-lyx" "Hebrew" ",Hl$,1,T(B" nil "Hebrew LyX input method.
|
||||
|
||||
Based on LyX keyboard layout.
|
||||
Additional mappings for Rafe and Yiddish ligatures.
|
||||
" nil t t t t nil nil nil nil nil t)
|
||||
|
||||
(quail-define-rules
|
||||
("`" ?\;)
|
||||
("_" ?$,1,^(B) ; Maqaf
|
||||
("q`" ?$,1,P(B) ; Sheva
|
||||
("w" ?\')
|
||||
("e" ?,Hw(B) ; Qof
|
||||
("r" ?,Hx(B) ; Resh
|
||||
("t" ?,H`(B) ; Alef
|
||||
("y" ?,Hh(B) ; Tet
|
||||
("u" ?,He(B) ; Vav
|
||||
("i" ?,Ho(B) ; Final Nun
|
||||
("o" ?,Hm(B) ; Final Mem
|
||||
("p" ?,Ht(B) ; Pe
|
||||
("[" ?\]) ; mirroring
|
||||
("]" ?\[) ; mirroring
|
||||
("a" ?,Hy(B) ; Shin
|
||||
("s" ?,Hc(B) ; Dalet
|
||||
("d" ?,Hb(B) ; Gimel
|
||||
("f" ?,Hk(B) ; Kaf
|
||||
("g" ?,Hr(B) ; Ayin
|
||||
("h" ?,Hi(B) ; Yod
|
||||
("j" ?,Hg(B) ; Het
|
||||
("k" ?,Hl(B) ; Lamed
|
||||
("l" ?,Hj(B) ; Final Kaf
|
||||
(";" ?,Hs(B) ; Final Pe
|
||||
("'" ?,)
|
||||
("z" ?,Hf(B) ; Zayin
|
||||
("x" ?,Hq(B) ; Samekh
|
||||
("c" ?,Ha(B) ; Bet
|
||||
("v" ?,Hd(B) ; He
|
||||
("b" ?,Hp(B) ; Nun
|
||||
("n" ?,Hn(B) ; Mem
|
||||
("m" ?,Hv(B) ; Tsadi
|
||||
("," ?,Hz(B) ; Tav
|
||||
("." ?,Hu(B) ; Final Tsadi
|
||||
("/" ?.) ; Stop
|
||||
("(" ?\)) ; mirroring
|
||||
(")" ?\() ; mirroring
|
||||
("W" ?$,1-3(B) ; Geresh (Punct.)
|
||||
("E" ?$,1,X(B) ; Qamats
|
||||
("R" ?$,1,_(B) ; Rafe
|
||||
("T" ?\u200E) ; LRM
|
||||
("Y" ?\u200F) ; RLM
|
||||
("U" ?$,1,Y(B) ; Holam
|
||||
("I" ?$,1-2(B) ; Yiddish Double Yod
|
||||
("O" ?$,1-0(B) ; Yiddish Double Vav
|
||||
("P" ?$,1,W(B) ; Patah
|
||||
("{" ?}) ; mirroring
|
||||
("}" ?{) ; mirroring
|
||||
("A" ?$,1,P(B) ; Sheva
|
||||
("S" ?$,1,\(B) ; Dagesh or Mapiq
|
||||
("F" ?$,1-4(B) ; Gershayim (Punct.)
|
||||
("G" ?$,1,b(B) ; Sin dot
|
||||
("H" ?$,1,a(B) ; Shin dot
|
||||
("J" ?$,1,T(B) ; Hiriq
|
||||
("K" ?$,1tJ(B) ; New Sheqel sign
|
||||
("L" ?$,1-1(B) ; Yiddish Vav Yod
|
||||
("X" ?$,1,V(B) ; Segol (Point)
|
||||
("C" ?$,1,[(B) ; Qubuts
|
||||
("V" ?$,1,Q(B) ; Hataf Segol
|
||||
("B" ?$,1,R(B) ; Hataf Patah
|
||||
("N" ?$,1,S(B) ; Hataf Qamats
|
||||
("M" ?$,1,U(B) ; Tsere
|
||||
("<" ?>) ; mirroring
|
||||
(">" ?<) ; mirroring
|
||||
)
|
||||
|
||||
|
||||
(quail-define-package
|
||||
"hebrew-full" "Hebrew" ",Hr$,1,T,K(B" nil "Hebrew Full method.
|
||||
|
||||
Provides access to all Hebrew characters suiltable to Modern Hebrew.
|
||||
" nil t t t t nil nil nil nil nil t)
|
||||
|
||||
(quail-define-rules
|
||||
("`" ?\;)
|
||||
("-" ?$,1,^(B) ; Maqaf
|
||||
("w" ?')
|
||||
("e" ?,Hw(B)
|
||||
("r" ?,Hx(B)
|
||||
("t" ?,H`(B)
|
||||
("y" ?,Hh(B)
|
||||
("u" ?,He(B)
|
||||
("i" ?,Ho(B)
|
||||
("o" ?,Hm(B)
|
||||
("p" ?,Ht(B)
|
||||
("a" ?,Hy(B)
|
||||
("s" ?,Hc(B)
|
||||
("d" ?,Hb(B)
|
||||
("f" ?,Hk(B)
|
||||
("g" ?,Hr(B)
|
||||
("h" ?,Hi(B)
|
||||
("j" ?,Hg(B)
|
||||
("k" ?,Hl(B)
|
||||
("l" ?,Hj(B)
|
||||
(";" ?,Hs(B)
|
||||
("z" ?,Hf(B)
|
||||
("x" ?,Hq(B)
|
||||
("c" ?,Ha(B)
|
||||
("v" ?,Hd(B)
|
||||
("b" ?,Hp(B)
|
||||
("n" ?,Hn(B)
|
||||
("m" ?,Hv(B)
|
||||
("," ?,Hz(B)
|
||||
("." ?,Hu(B)
|
||||
("e" ?,Hw(B) ; Qof
|
||||
("r" ?,Hx(B) ; Resh
|
||||
("t" ?,H`(B) ; Alef
|
||||
("y" ?,Hh(B) ; Tet
|
||||
("u" ?,He(B) ; Vav
|
||||
("i" ?,Ho(B) ; Final Nun
|
||||
("o" ?,Hm(B) ; Final Mem
|
||||
("p" ?,Ht(B) ; Pe
|
||||
("[" ?\]) ; mirroring
|
||||
("]" ?\[) ; mirroring
|
||||
("a" ?,Hy(B) ; Shin
|
||||
("s" ?,Hc(B) ; Dalet
|
||||
("d" ?,Hb(B) ; Gimel
|
||||
("f" ?,Hk(B) ; Kaf
|
||||
("g" ?,Hr(B) ; Ayin
|
||||
("h" ?,Hi(B) ; Yod
|
||||
("j" ?,Hg(B) ; Het
|
||||
("k" ?,Hl(B) ; Lamed
|
||||
("l" ?,Hj(B) ; Final Kaf
|
||||
(";" ?,Hs(B) ; Final Pe
|
||||
("'" ?,)
|
||||
("z" ?,Hf(B) ; Zayin
|
||||
("x" ?,Hq(B) ; Samekh
|
||||
("c" ?,Ha(B) ; Bet
|
||||
("v" ?,Hd(B) ; He
|
||||
("b" ?,Hp(B) ; Nun
|
||||
("n" ?,Hn(B) ; Mem
|
||||
("m" ?,Hv(B) ; Tsadi
|
||||
("," ?,Hz(B) ; Tav
|
||||
("." ?,Hu(B) ; Final Tsadi
|
||||
("/" ?.)
|
||||
("'" ?,))
|
||||
|
||||
("(" ?\)) ; mirroring
|
||||
(")" ?\() ; mirroring
|
||||
("Q" ?/)
|
||||
("W" ?$,1-3(B) ; Geresh (Punct.)
|
||||
("E" ?$,1tJ(B) ; New Sheqel Sign
|
||||
("R" ?$,1,_(B) ; Rafe
|
||||
("T" ?$,1,Q(B) ; Hataf Segol
|
||||
("Y" ?$,1-1(B) ; Yiddish Vav Yod
|
||||
("U" ?$,1-0(B) ; Yiddish Double Vav
|
||||
("I" ?$,1,R(B) ; Hataf Patah
|
||||
("O" ?$,1,S(B) ; Hataf Qamats
|
||||
("P" ?$,1-4(B) ; Gershayim (Punct.)
|
||||
("{" ?}) ; mirroring
|
||||
("}" ?{) ; mirroring
|
||||
("A" ?$,1,P(B) ; Sheva
|
||||
("S" ?$,1,\(B) ; Dagesh or Mapiq
|
||||
("D" ?$,1,[(B) ; Qubuts
|
||||
("F" ?$,1,Y(B) ; Holam
|
||||
("G" ?$,1,V(B) ; Segol (Point)
|
||||
("H" ?$,1,U(B) ; Tsere
|
||||
("J" ?$,1,T(B) ; Hiriq
|
||||
("K" ?$,1,W(B) ; Patah
|
||||
("L" ?$,1,X(B) ; Qamats
|
||||
("Z" ?$,1,b(B) ; Sin Dot
|
||||
("X" ?$,1,a(B) ; Shin Dot
|
||||
("C" ?$,1,K(B) ; Ole
|
||||
("V" ?$,1-2(B) ; Yiddish Double Yod
|
||||
("B" ?$,1,c(B) ; Sof Pasuq
|
||||
("N" ?\u200E) ; LRM
|
||||
("M" ?\u200F) ; RLM
|
||||
("<" ?>) ; mirroring
|
||||
(">" ?<) ; mirroring
|
||||
|
||||
("q`" ?\u202D) ; LRO
|
||||
("q1" ?\u202E) ; RLO
|
||||
("q2" ?\u202A) ; LRE
|
||||
("q3" ?\u202B) ; RLE
|
||||
("q4" ?\u202C) ; PDF
|
||||
("q5" ?\u034F) ; CGJ
|
||||
("q6" ?$,1,L(B) ; Iluy
|
||||
("q8" ?$,1,M(B) ; Dehi
|
||||
("q9" ?$,1,g(B) ; Qamats Qatan
|
||||
("q0" ?$,1,=(B) ; Geresh Muqdam
|
||||
("q-" ?-) ; Minus
|
||||
("q=" ?$,1,N(B) ; Zinor
|
||||
("q|" ?$,1,`(B) ; Paseq
|
||||
("qw" ?$,1,O(B) ; Masora Circle
|
||||
("qe" ?$,1,d(B) ; Upper Dot
|
||||
("qr" ?$,1,e(B) ; Lower Dot
|
||||
("qy" ?$,1,?(B) ; Qarney Para
|
||||
("qu" ?$,1,3(B) ; Shalshelet
|
||||
("qi" ?$,1,>(B) ; Gershayim (Accent)
|
||||
("qo" ?$,1,<(B) ; Geresh (Accent)
|
||||
("qp" ?$,1,H(B) ; Qadma
|
||||
("q[" ?$,1,f(B) ; Nun Hafukha
|
||||
("qa" ?$,1,Z(B) ; Holam Haser for Vav
|
||||
("qs" ?$,1,I(B) ; Telisha Qetana
|
||||
("qd" ?$,1,@(B) ; Telisha Gedola
|
||||
("qf" ?$,1,A(B) ; Pazer
|
||||
("qg" ?$,1,5(B) ; Zaqef Gadol
|
||||
("qh" ?$,1,4(B) ; Zaqef Qatan
|
||||
("qj" ?$,1,9(B) ; Pashta
|
||||
("qk" ?$,1,D(B) ; Mahapakh
|
||||
("ql" ?$,1,7(B) ; Revia
|
||||
("q;" ?$,1,2(B) ; Segol (Accent)
|
||||
("q'" ?$,1,8(B) ; Zarqa
|
||||
("qz" ?$,1,J(B) ; Yerah Ben Yomo
|
||||
("qx" ?$,1,F(B) ; Merkha Kefula
|
||||
("qc" ?$,1,:(B) ; Yetiv
|
||||
("qv" ?$,1,;(B) ; Tevir
|
||||
("qb" ?$,1,G(B) ; Darga
|
||||
("qn" ?$,1,1(B) ; Etnahta
|
||||
("qm" ?$,1,C(B) ; Munah
|
||||
("q," ?$,1,6(B) ; Tipeha
|
||||
("q." ?$,1,E(B) ; Merkha
|
||||
("q/" ?$,1,](B) ; Meteg
|
||||
)
|
||||
|
||||
|
||||
(quail-define-package
|
||||
"hebrew-biblical-tiro" "Hebrew" ",Hz$,1,T,Hx$,1,Y(B" nil
|
||||
"Biblical Hebrew Tiro input method.
|
||||
|
||||
Based on Society of Biblical Literature's Tiro keyboard layout.
|
||||
Not suiltable for modern Hebrew input.
|
||||
'q' is used to switch levels instead of Alt-Gr.
|
||||
Combining dot above (Called Masora dot) ($,1%G(B) is mapped to 'q1'.
|
||||
" nil t t t t nil nil nil nil nil t)
|
||||
|
||||
(quail-define-rules
|
||||
("`" ?$,1,c(B) ; Sof Pasuq
|
||||
("-" ?$,1,^(B) ; Maqaf
|
||||
("=" ?$(O#?(B) ; White Bullet
|
||||
("w" ?$,1-3(B) ; Geresh (Punct.)
|
||||
("e" ?,Hw(B) ; Qof
|
||||
("r" ?,Hx(B) ; Resh
|
||||
("t" ?,H`(B) ; Alef
|
||||
("y" ?,Hh(B) ; Tet
|
||||
("u" ?,He(B) ; Vav
|
||||
("i" ?,Ho(B) ; Final Nun
|
||||
("o" ?,Hm(B) ; Final Mem
|
||||
("p" ?,Ht(B) ; Pe
|
||||
("[" ?\]) ; mirroring
|
||||
("]" ?\[) ; mirroring
|
||||
("\\" ?$,1,`(B) ; Paseq
|
||||
("a" ?,Hy(B) ; Shin
|
||||
("s" ?,Hc(B) ; Dalet
|
||||
("d" ?,Hb(B) ; Gimel
|
||||
("f" ?,Hk(B) ; Kaf
|
||||
("g" ?,Hr(B) ; Ayin
|
||||
("h" ?,Hi(B) ; Yod
|
||||
("j" ?,Hg(B) ; Het
|
||||
("k" ?,Hl(B) ; Lamed
|
||||
("l" ?,Hj(B) ; Final Kaf
|
||||
(";" ?,Hs(B) ; Final Pe
|
||||
("'" ?$,1,:(B) ; Yetiv
|
||||
("z" ?,Hf(B) ; Zayin
|
||||
("x" ?,Hq(B) ; Samekh
|
||||
("c" ?,Ha(B) ; Bet
|
||||
("v" ?,Hd(B) ; He
|
||||
("b" ?,Hp(B) ; Nun
|
||||
("n" ?,Hn(B) ; Mem
|
||||
("m" ?,Hv(B) ; Tsadi
|
||||
("," ?,Hz(B) ; Tav
|
||||
("." ?,Hu(B) ; Final Tsadi
|
||||
("/" ?$,1,M(B) ; Dehi
|
||||
("~" ?$,1,N(B) ; Zinor
|
||||
("!" ?$,1,I(B) ; Telisha Qetana
|
||||
("@" ?$,1,9(B) ; Pashta
|
||||
("#" ?$,1,2(B) ; Segol (Accent)
|
||||
("$" ?$,1,O(B) ; Masora circle
|
||||
("%" ?$,1,Z(B) ; Holam Haser for Vav
|
||||
("^" ?$,1,Y(B) ; Holam
|
||||
("&" ?$,1,_(B) ; Rafe
|
||||
("*" ?$,1,b(B) ; Sin dot
|
||||
("(" ?$,1,a(B) ; Shin dot
|
||||
(")" ?$,1,=(B) ; Geresh Muqdam
|
||||
("_" ?$,1,@(B) ; Telisha Gedola
|
||||
("+" ?$,1,\(B) ; Dagesh or Mapiq
|
||||
("Q" ?$,1,d(B) ; Upper dot
|
||||
("W" ?$,1,L(B) ; Iluy
|
||||
("E" ?$,1,K(B) ; Ole
|
||||
("R" ?$,1,?(B) ; Qarney Para
|
||||
("T" ?$,1,3(B) ; Shalshelet
|
||||
("Y" ?$,1,>(B) ; Gershayim (Accent)
|
||||
("U" ?$,1,<(B) ; Geresh (Accent)
|
||||
("I" ?$,1,A(B) ; Pazer
|
||||
("O" ?$,1,5(B) ; Zaqef Gadol
|
||||
("P" ?$,1,4(B) ; Zaqef Qatan
|
||||
("{" ?$,1,7(B) ; Revia
|
||||
("}" ?$,1,8(B) ; Zarqa
|
||||
("|" ?$,1,H(B) ; Qadma
|
||||
("A" ?$,1,](B) ; Meteg
|
||||
("S" ?$,1,P(B) ; Sheva
|
||||
("D" ?$,1,[(B) ; Qubuts
|
||||
("F" ?$,1,T(B) ; Hiriq
|
||||
("G" ?$,1,Q(B) ; Hataf Segol
|
||||
("H" ?$,1,V(B) ; Segol (Point)
|
||||
("J" ?$,1,U(B) ; Tsere
|
||||
("K" ?$,1,S(B) ; Hataf Qamats
|
||||
("L" ?$,1,X(B) ; Qamats
|
||||
(":" ?$,1,R(B) ; Hataf Patah
|
||||
("\"" ?$,1,W(B) ; Patah
|
||||
("Z" ?$,1,e(B) ; Lower dot
|
||||
("X" ?$,1,D(B) ; Mahapakh
|
||||
("C" ?$,1,J(B) ; Yerah Ben Yomo
|
||||
("V" ?$,1,F(B) ; Merkha Kefula
|
||||
("B" ?$,1,E(B) ; Merkha
|
||||
("N" ?$,1,G(B) ; Darga
|
||||
("M" ?$,1,;(B) ; Tevir
|
||||
("<" ?$,1,1(B) ; Etnahta
|
||||
(">" ?$,1,6(B) ; Tipeha
|
||||
("?" ?$,1,C(B) ; Munah
|
||||
|
||||
("q`" ?\;)
|
||||
("q1" ?\u0307) ; Combining dot above
|
||||
("q2" ?\u0336) ; Combining long stroke overlay
|
||||
("q3" ?\u030A) ; Combining ring above
|
||||
("q4" ?$,1tJ(B) ; New Sheqel Sign
|
||||
("q5" ?\u200D) ; ZWJ
|
||||
("q6" ?\u200C) ; ZWNJ
|
||||
("q7" ?\u034F) ; CGJ
|
||||
("q8" ?\u200E) ; LRM
|
||||
("q9" ?\u200F) ; RLM
|
||||
("q0" ?$,2",(B) ; Dotted Circle
|
||||
("q-" ?-) ; Minus
|
||||
("q=" ?$(O#@(B) ; Bullet
|
||||
("qq" ?\u0308) ; Combining Diaeresis
|
||||
("qw" ?$,1-4(B) ; Gershayim (Punct.)
|
||||
("qe" ?,F$(B) ; Euro Sign
|
||||
("qu" ?$,1-0(B) ; Yiddish Double Vav
|
||||
("q\\" ?\\)
|
||||
("qh" ?$,1-2(B) ; Yiddish Double Yod
|
||||
("qj" ?$,1-1(B) ; Yiddish Vav Yod
|
||||
("ql" ?$,1,g(B) ; Qamats Qatan
|
||||
("q'" ?,)
|
||||
("qc" ?$,1,B(B) ; Atnah Hafukh
|
||||
("qb" ?$,1,f(B) ; Nun Hafukha
|
||||
("q/" ?.)
|
||||
|
||||
("q~" ?~)
|
||||
("q!" ?!)
|
||||
("q@" ?@)
|
||||
("q#" ?#)
|
||||
("q$" ?$)
|
||||
("q%" ?%)
|
||||
("q^" ?^)
|
||||
("q&" ?&)
|
||||
("q*" ?*)
|
||||
("q(" ?\)) ; mirroring
|
||||
("q)" ?\() ; mirroring
|
||||
("q_" ?_)
|
||||
("q+" ?+)
|
||||
("qQ" ?/)
|
||||
("qW" ?')
|
||||
("q{" ?}) ; mirroring
|
||||
("q}" ?{) ; mirroring
|
||||
("q|" ?|)
|
||||
("q:" ?:)
|
||||
("q\"" ?\")
|
||||
("q<" ?>)
|
||||
("q>" ?<)
|
||||
("q?" ??)
|
||||
)
|
||||
|
||||
(quail-define-package
|
||||
"hebrew-biblical-sil" "Hebrew" ",Hq$,1,T,Hl(B" nil
|
||||
"Biblical Hebrew SIL input method.
|
||||
|
||||
Based on Society of Biblical Literature's SIL keyboard layout.
|
||||
Phonetic and not suiltable for modern Hebrew input.
|
||||
'`' is used to switch levels instead of Alt-Gr.
|
||||
Euro Sign (,F$(B) is mapped to 'Z'.
|
||||
" nil t t t t nil nil nil nil nil t)
|
||||
|
||||
(quail-define-rules
|
||||
("-" ?$,1,^(B) ; Maqaf
|
||||
("=" ?$,1,\(B) ; Dagesh or Mapiq
|
||||
("q" ?,Hw(B) ; Qof
|
||||
("w" ?,He(B) ; Vav
|
||||
("e" ?$,1,V(B) ; Segol (Point)
|
||||
("r" ?,Hx(B) ; Resh
|
||||
("t" ?,Hz(B) ; Tav
|
||||
("y" ?,Hi(B) ; Yod
|
||||
("u" ?$,1,[(B) ; Qubuts
|
||||
("i" ?$,1,T(B) ; Hiriq
|
||||
("o" ?$,1,Y(B) ; Holam
|
||||
("p" ?,Ht(B) ; Pe
|
||||
("[" ?\]) ; mirroring
|
||||
("]" ?\[) ; mirroring
|
||||
("\\" ?$,1,`(B) ; Paseq
|
||||
("a" ?$,1,W(B) ; Patah
|
||||
("s" ?,Hq(B) ; Samekh
|
||||
("d" ?,Hc(B) ; Dalet
|
||||
("f" [ ",Hy$,1,b(B" ]) ; Shin + Sin dot
|
||||
("g" ?,Hb(B) ; Gimel
|
||||
("h" ?,Hd(B) ; He
|
||||
("j" [ ",Hy$,1,a(B" ]) ; Shin + Shin dot
|
||||
("k" ?,Hk(B) ; Kaf
|
||||
("l" ?,Hl(B) ; Lamed
|
||||
(";" ?$,1,P(B) ; Sheva
|
||||
("'" ?,F"(B) ; Right Single Quotation Mark
|
||||
("z" ?,Hf(B) ; Zayin
|
||||
("x" ?,Hg(B) ; Het
|
||||
("c" ?,Hv(B) ; Tsadi
|
||||
("v" ?,Hh(B) ; Tet
|
||||
("b" ?,Ha(B) ; Bet
|
||||
("n" ?,Hp(B) ; Nun
|
||||
("m" ?,Hn(B) ; Mem
|
||||
|
||||
("~" ?$,1tJ(B) ; New Sheqel Sign
|
||||
("@" ?$,1,8(B) ; Zarqa
|
||||
("#" ?$,1,H(B) ; Qadma
|
||||
("$" ?$,1,<(B) ; Geresh (Accent)
|
||||
("%" ?$,1,>(B) ; Gershayim (Accent)
|
||||
("&" ?$,1,L(B) ; Iluy
|
||||
("*" ?$,1,=(B) ; Geresh Muqdam
|
||||
("(" ?\)) ; mirroring
|
||||
(")" ?\() ; mirroring
|
||||
("_" ?$(G!9(B) ; Em Dash
|
||||
("Q" ?$,1,7(B) ; Revia
|
||||
("E" ?$,1,U(B) ; Tsere
|
||||
("Y" ?$,1,?(B) ; Qarney Para
|
||||
("O" ?$,1,Z(B) ; Holam Haser for Vav
|
||||
("P" ?,Hs(B) ; Final Pe
|
||||
("{" ?}) ; mirroring
|
||||
("}" ?{) ; mirroring
|
||||
|
||||
("A" ?$,1,X(B) ; Qamats
|
||||
("S" ?,Hy(B) ; Shin
|
||||
("K" ?,Hj(B) ; Final Kaf
|
||||
(":" ?$,1-4(B) ; Gershayim (Punct.)
|
||||
("\"" ?,Y!(B) ; Right Double Quotation Mark
|
||||
("Z" ?,F$(B) ; Euro Sign
|
||||
("C" ?,Hu(B) ; Final Tsadi
|
||||
("N" ?,Ho(B) ; Final Nun
|
||||
("M" ?,Hm(B) ; Final Mem
|
||||
("<" ?,Hr(B) ; Ayin
|
||||
(">" ?,H`(B) ; Alef
|
||||
|
||||
("``" ?$)
|
||||
("`1" ?$,1,](B) ; Meteg
|
||||
("`2" ?$,1,B(B) ; Atnah Hafukh
|
||||
("`3" ?$,1,6(B) ; Tipeha
|
||||
("`4" ?$,1,E(B) ; Merkha
|
||||
("`5" ?$,1,F(B) ; Merkha Kefula
|
||||
("`6" ?$,1,M(B) ; Dehi
|
||||
("`7" ?$,1,C(B) ; Munah
|
||||
("`8" ?$,1,;(B) ; Tevir
|
||||
("`9" ?$,1,G(B) ; Darga
|
||||
("`0" ?$,1,J(B) ; Yerah Ben Yomo
|
||||
("`-" ?$(G!7(B) ; Em Dash
|
||||
("`=" ?$,1,1(B) ; Etnahta
|
||||
("`]" ?$,1,:(B) ; Accent Yetiv
|
||||
("`\\" ?$,1,D(B) ; Mahapakh
|
||||
("`a" ?$,1,g(B) ; Qamats Qatan
|
||||
("`g" ? $(O#?(B) ; White Bullet
|
||||
("`h" ?\u0336) ; Combining Long Stroke Overlay
|
||||
("`;" ?\;)
|
||||
("`'" ?\u0323); Combining Dot Below (Lower Point??)
|
||||
("`m" ?\u200C) ; ZWNJ
|
||||
("`," ?,A;(B) ; mirroring
|
||||
("`." ?,A+(B) ; mirroring
|
||||
("`/" ?$,1-3(B) ; Geresh (Punct.)
|
||||
|
||||
("`!" ?$,1,7(B) ; Revia
|
||||
("`@" ?$,1,N(B) ; Zinor
|
||||
("`#" ?$,1,9(B) ; Pashta
|
||||
("`$" ?$,1,@(B) ; Telisha Gedola
|
||||
("`%" ?$,1,I(B) ; Telisha Qetana
|
||||
("`&" ?$,1,A(B) ; Pazer
|
||||
("`*" ?$,1,5(B) ; Zaqef Gadol
|
||||
("`(" ?$,1,3(B) ; Shalshelet
|
||||
("`)" ?$,1,O(B) ; Masora Circle
|
||||
("`_" ?$,1,_(B) ; Rafe
|
||||
("`+" ?$,2",(B) ; Dotted Circle
|
||||
("`E" ?$,1,Q(B) ; Hataf Segol
|
||||
("`O" ?$,1,S(B) ; Hataf Qamats
|
||||
("`P" ?\u034F) ; CGJ
|
||||
("`{" ?$,1,4(B) ; Zaqef Qatan
|
||||
("`}" ?$,1,2(B) ; Segol (Accent)
|
||||
("`|" ?$,1,K(B) ; Ole
|
||||
("`A" ?$,1,R(B) ; Hataf Patah
|
||||
("`G" ?$(O#@(B) ; Bullet
|
||||
("`H" ?\u030A) ; Combining ring above
|
||||
("`:" ?$,1,c(B) ; Sof Pasuq
|
||||
("`\"" ?$,1,d(B) ; Upper Dot
|
||||
("`M" ?\u200D) ; ZWJ
|
||||
("`<" ?\u0307) ; Combining dot above
|
||||
("`>" ?\u0308) ; Combining Diaeresis
|
||||
)
|
||||
|
||||
|
||||
(quail-define-package
|
||||
"yiddish-royal" "Hebrew" "$,1-2,Hx(B" nil "Yiddish Royal input method.
|
||||
|
||||
Based on Royal Yiddish typewriter.
|
||||
Better for yiddish than Hebrew methods.
|
||||
" nil t t t t nil nil nil nil nil t)
|
||||
|
||||
(quail-define-rules
|
||||
("`" ?~)
|
||||
("q" ?,Hw(B) ; Qof
|
||||
("w" [ ",H`$,1,X(B" ]) ; Qamats Alef (Komets Alef)
|
||||
("e" ?,Hx(B) ; Resh
|
||||
("r" ?,H`(B) ; Alef (Shtumer Alef)
|
||||
("t" ?,Hh(B) ; Tet
|
||||
("y" ?$,1-0(B) ; Yiddish Double Vav (Tsvey Vovn)
|
||||
("u" ?,He(B) ; Vav
|
||||
("i" ?,Ho(B) ; Final Nun
|
||||
("o" ?,Hm(B) ; Final Mem
|
||||
("p" [ ",Ht$,1,_(B" ]) ; Rafe Pe (Fey)
|
||||
("[" [ ",Ht$,1,\(B" ]) ; Dagesh Pe (Pey)
|
||||
("]" ?,)
|
||||
("a" ?,Hy(B) ; Shin
|
||||
("s" ?,Hc(B) ; Dalet
|
||||
("d" ?,Hb(B) ; Gimel
|
||||
("f" ?,Hk(B) ; Kaf
|
||||
("g" ?,Hr(B) ; Ayin
|
||||
("h" ?$,1-2(B) ; Yiddish Double Yod (Tsvey Yudn)
|
||||
("j" ?,Hi(B) ; Yod
|
||||
("k" ?,Hg(B) ; Het
|
||||
("l" ?,Hl(B) ; Lamed
|
||||
(";" ?,Hj(B) ; Final Kaf
|
||||
("'" ?,Hs(B) ; Final Pe
|
||||
("z" ?.)
|
||||
("x" ?,Hf(B) ; Zayin
|
||||
("c" ?,Hq(B) ; Samekh
|
||||
("v" ?,Ha(B) ; Bet
|
||||
("b" ?,Hd(B) ; He
|
||||
("n" ?,Hp(B) ; Nun
|
||||
("m" ?,Hn(B) ; Mem
|
||||
("," ?,Hv(B) ; Tsadi
|
||||
("." ?,Hz(B) ; Tav
|
||||
("/" ?,Hu(B) ; Final Tsadi
|
||||
|
||||
("~" ?@)
|
||||
("!" ?,Y!(B) ; Right Double Quotation Mark
|
||||
("@" ?,Y%(B) ; Double Low-9 Quotation Mark
|
||||
("(" ?\)) ; mirroring
|
||||
(")" ?\() ; mirroring
|
||||
("Q" ?,A=(B) ; Right Double Quotation Mark
|
||||
("W" ?,A<(B)
|
||||
("E" ?,A>(B) ; Yiddish Double Yod (x2)
|
||||
("R" [ ",H`$,1,W(B" ]) ; Patah Alef (Pasekh Alef)
|
||||
; ("T" "")
|
||||
("Y" ?$,1-1(B) ; Ligature Yiddish Vav Yod (vov yud)
|
||||
("U" [ ",He$,1,\(B" ]) ; Melupm vov
|
||||
("I" ?/)
|
||||
("O" ?\\)
|
||||
("P" ?,Ht(B) ; Pe
|
||||
("{" ??)
|
||||
("}" ?!)
|
||||
("A" [ ",Hy$,1,b(B" ]) ; Shin + Sin dot
|
||||
("S" [ ",Hy$,1,b(B" ]) ; Shin + Sin dot
|
||||
; ("D" "")
|
||||
("F" [ ",Hk$,1,\(B" ]) ; Dagesh Kaf (Kof)
|
||||
; ("G" "")
|
||||
("H" [ "$,1-2,W(B" ]) ; Yiddish Double Yod + Patah (Pasekh Tsvey Yudn)
|
||||
("J" [ ",Hi$,1,T(B" ]) ; Khirik Yud
|
||||
("K" ?}) ; mirroring
|
||||
("L" ?{) ; mirroring
|
||||
("\"" ?\;)
|
||||
("Z" ??)
|
||||
("X" ?|)
|
||||
("C" [ ",Ha$,1,\(B" ]) ; Dagesh Bet (Beys)
|
||||
("V" [ ",Ha$,1,_(B" ]) ; Rafe Bet (Veys)
|
||||
("B" ?\]) ; mirroring
|
||||
("N" ?\[) ; mirroring
|
||||
("M" ?>) ; mirroring
|
||||
("<" ?<) ; mirroring
|
||||
(">" [ ",Hz$,1,\(B" ]) ; Dagesh Tav (Tof)
|
||||
("?" ?\')
|
||||
)
|
||||
|
||||
|
||||
(quail-define-package
|
||||
"yiddish-keyman" "Hebrew" "$,1-2,Hw(B" nil "Yiddish Keyman input method.
|
||||
|
||||
Based on Keyman keyboard layout.
|
||||
Better for yiddish than Hebrew methods..
|
||||
" nil t t t t nil nil nil nil nil t)
|
||||
|
||||
(quail-define-rules
|
||||
("`" ?\;)
|
||||
("q" ?,Y%(B) ; Double Low-9 Quotation Mark
|
||||
("w" ?,Hy(B) ; Shin
|
||||
("e" ?,Hr(B) ; Ayin
|
||||
("r" ?,Hx(B) ; Resh
|
||||
("t" ?,Hh(B) ; Tet
|
||||
("y" ?,Hi(B) ; Yod
|
||||
("u" ?,He(B) ; Vav
|
||||
("i" ?,Hi(B) ; Yod (x2)
|
||||
("o" [ ",H`$,1,X(B" ]) ; Qamats Alef (Komets Alef)
|
||||
("p" [ ",Ht$,1,\(B" ]) ; Dagesh Pe (Pey)
|
||||
("[" ?\]) ; mirroring
|
||||
("]" ?\[) ; mirroring
|
||||
("a" [ ",H`$,1,W(B" ]) ; Patah Alef (Pasekh Alef)
|
||||
("s" ?,Hq(B) ; Samekh
|
||||
("d" ?,Hc(B) ; Dalet
|
||||
("f" [ ",Ht$,1,_(B" ]) ; Rafe Pe (Fey)
|
||||
("g" ?,Hb(B) ; Gimel
|
||||
("h" ?,Hd(B) ; He
|
||||
("j" ?$,1-2(B) ; Yiddish Double Yod (Tsvey Yudn)
|
||||
("k" ?,Hw(B) ; Qof
|
||||
("l" ?,Hl(B) ; Lamed
|
||||
("z" ?,Hf(B) ; Zayin
|
||||
("x" ?,Hk(B) ; Kaf
|
||||
("c" ?,Hv(B) ; Tsadi
|
||||
("v" ?$,1-0(B) ; Yiddish Double Vav (Tsvey Vovn)
|
||||
("b" ?,Ha(B) ; Bet
|
||||
("n" ?,Hp(B) ; Nun
|
||||
("m" ?,Hn(B) ; Mem
|
||||
|
||||
("(" ?\)) ; mirroring
|
||||
(")" ?\() ; mirroring
|
||||
("Q" ?,Y!(B) ; Right Double Quotation Mark
|
||||
("W" [ ",Hy$,1,b(B" ]) ; Shin + Sin dot
|
||||
("E" ?$,1-2(B) ; Yiddish Double Yod (x2)
|
||||
; ("R" "") ;
|
||||
("T" [ ",Hz$,1,\(B" ]) ; Dagesh Tav (Tof)
|
||||
("Y" [ "$,1-2,W(B" ]) ; Yiddish Double Yod + Patah (Pasekh Tsvey Yudn)
|
||||
("U" [ ",He$,1,\(B" ]) ; Melupm vov
|
||||
("I" [ ",Hi$,1,T(B" ]) ; Khirik Yud
|
||||
("O" ?$,1-1(B) ; Ligature Yiddish Vav Yod (vov yud)
|
||||
; ("P" "")
|
||||
("{" ?}) ; mirroring
|
||||
("}" ?{) ; mirroring
|
||||
("A" ?,H`(B) ; Alef (Shtumer Alef)
|
||||
("S" ?,Hz(B) ; Tav
|
||||
("F" ?,Hs(B) ; Final Pe
|
||||
("G" ?$,1-3(B) ; Geresh (Punct.)
|
||||
("H" ?,Hg(B) ; Het
|
||||
("J" ?$,1-2(B) ; Yiddish Double Yod (x2)
|
||||
("K" [ ",Hk$,1,\(B" ]) ; Dagesh Kaf (Kof)
|
||||
; ("L" "")
|
||||
; ("Z" "")
|
||||
("X" ?,Hj(B) ; Final Kaf
|
||||
("C" ?,Hu(B) ; Final Tsadi
|
||||
("V" [ ",Ha$,1,_(B" ]) ; Rafe Bet (Veys) ) ; Bet
|
||||
; ("B" "")
|
||||
("N" ?,Ho(B) ; Final Nun
|
||||
("M" ?,Hm(B) ; Final Mem
|
||||
("<" ?>) ; mirroring
|
||||
(">" ?<) ; mirroring
|
||||
)
|
||||
|
||||
;;; hebrew.el ends here
|
||||
|
|
|
@ -1,3 +1,82 @@
|
|||
2011-07-27 Michael Albinus <michael.albinus@gmx.de>
|
||||
|
||||
* net/tramp-sh.el (tramp-maybe-send-script): Don't let-bind the
|
||||
connection process, it could be nil.
|
||||
|
||||
2011-07-27 Leo Liu <sdl.web@gmail.com>
|
||||
|
||||
Simplify url handling in rcirc-mode.
|
||||
|
||||
* net/rcirc.el (rcirc-browse-url-map, rcirc-browse-url-at-point)
|
||||
(rcirc-browse-url-at-mouse): Remove.
|
||||
* net/rcirc.el (rcirc-markup-urls): Use `make-button'.
|
||||
|
||||
2011-07-26 Alan Mackenzie <acm@muc.de>
|
||||
|
||||
Fontify bitfield declarations properly.
|
||||
|
||||
* progmodes/cc-langs.el (c-has-bitfields): New lang variable.
|
||||
(c-symbol-chars): Now exported as a lang variable.
|
||||
(c-not-primitive-type-keywords): New lang variable.
|
||||
|
||||
* progmodes/cc-fonts.el (c-font-lock-declarations): Jump over the
|
||||
QT keyword "more" to prevent "more slots: ...." being spuriously
|
||||
parsed as a bitfield declaraion.
|
||||
|
||||
* progmodes/cc-engine.el (c-beginning-of-statement-1): Refactor
|
||||
and enhance to handle bitfield declarations.
|
||||
(c-punctuation-in): New function.
|
||||
(c-forward-decl-or-cast-1): Enhance CASE 3 to handle bitfield
|
||||
declarations properly.
|
||||
|
||||
2011-07-26 Ulf Jasper <ulf.jasper@web.de>
|
||||
|
||||
* calendar/icalendar.el (icalendar--all-events): Take care of
|
||||
multiple vcalendars in a single file.
|
||||
(icalendar--convert-float-to-ical): checkdoc fixes.
|
||||
|
||||
2011-07-25 Deniz Dogan <deniz@dogan.se>
|
||||
|
||||
* image.el (insert-image): Clarifying docstring.
|
||||
|
||||
2011-07-24 Michael Albinus <michael.albinus@gmx.de>
|
||||
|
||||
* net/tramp-sh.el (tramp-barf-unless-okay): Return the value of
|
||||
`tramp-send-command-and-check' if there is no error.
|
||||
(tramp-send-command-and-read): Suppress *all* errors if NOERROR.
|
||||
|
||||
2011-07-22 Alan Mackenzie <acm@muc.de>
|
||||
|
||||
Prevent cc-langs.elc being loaded at run time.
|
||||
|
||||
* progmodes/cc-mode.el: Remove two autoload forms which loaded
|
||||
cc-langs.
|
||||
|
||||
* /progmodes/cc-langs.el (c-make-init-lang-vars-fun): Don't emit
|
||||
"(require 'cc-langs)". Quote a form so it will evaluate at
|
||||
(cc-mode's) compilation time.
|
||||
|
||||
2011-07-22 Michael Albinus <michael.albinus@gmx.de>
|
||||
|
||||
* net/tramp.el (tramp-file-name-handler): Avoid recursive
|
||||
loading. (Bug#9114)
|
||||
|
||||
2011-07-21 Martin Rudalics <rudalics@gmx.at>
|
||||
|
||||
* window.el (display-buffer-pop-up-window)
|
||||
(display-buffer-pop-up-side-window)
|
||||
(display-buffer-in-side-window): Call display-buffer-set-height
|
||||
and display-buffer-set-width after setting the new window's
|
||||
buffer so `fit-window-to-buffer' and friends work on the right
|
||||
buffer.
|
||||
|
||||
2011-07-20 Sam Steingold <sds@gnu.org>
|
||||
|
||||
* progmodes/etags.el (etags-file-of-tag, etags-tags-table-files)
|
||||
(etags-tags-included-tables): Call `convert-standard-filename' on
|
||||
the file names contained in TAGS so that windows Emacs can handle
|
||||
TAGS files created by cygwin ctags.
|
||||
|
||||
2011-07-20 Lars Magne Ingebrigtsen <larsi@gnus.org>
|
||||
|
||||
* proced.el (proced-update): Revert yesterday's bug#1779 patch,
|
||||
|
|
|
@ -412,10 +412,15 @@ children."
|
|||
(setq result subresult)))))
|
||||
result))
|
||||
|
||||
; private
|
||||
;; private
|
||||
(defun icalendar--all-events (icalendar)
|
||||
"Return the list of all existing events in the given ICALENDAR."
|
||||
(icalendar--get-children (car icalendar) 'VEVENT))
|
||||
(let ((result '()))
|
||||
(mapc (lambda (elt)
|
||||
(setq result (append (icalendar--get-children elt 'VEVENT)
|
||||
result)))
|
||||
(nreverse icalendar))
|
||||
result))
|
||||
|
||||
(defun icalendar--split-value (value-string)
|
||||
"Split VALUE-STRING at ';='."
|
||||
|
@ -1571,8 +1576,8 @@ entries. ENTRY-MAIN is the first line of the diary entry."
|
|||
(n (nth 3 sexp))
|
||||
(day (nth 4 sexp))
|
||||
(summary
|
||||
(replace-regexp-in-string
|
||||
"\\(^\s+\\|\s+$\\)" ""
|
||||
(replace-regexp-in-string
|
||||
"\\(^\s+\\|\s+$\\)" ""
|
||||
(buffer-substring (point) (point-max)))))
|
||||
|
||||
(when day
|
||||
|
@ -1590,7 +1595,7 @@ entries. ENTRY-MAIN is the first line of the diary entry."
|
|||
(null (let ((date (calendar-current-date))
|
||||
(entry entry-main))
|
||||
(diary-float month dayname n)))
|
||||
(concat
|
||||
(concat
|
||||
"\nEXDATE;VALUE=DATE:"
|
||||
(format-time-string "%Y%m%d" (current-time))))
|
||||
"\nRRULE:"
|
||||
|
|
|
@ -1,3 +1,22 @@
|
|||
2011-07-24 Andrew Cohen <cohen@andy.bu.edu>
|
||||
|
||||
* nnimap.el (nnimap-make-thread-query): Quote message-ids for gmail.
|
||||
|
||||
2011-07-23 Andrew Cohen <cohen@andy.bu.edu>
|
||||
|
||||
* nnir.el (nnir-search-thread): New function to make an nnir group
|
||||
based on a thread query.
|
||||
|
||||
* gnus-sum.el (gnus-refer-thread-use-nnir): New variable to control use
|
||||
of nnir in thread referral.
|
||||
(gnus-summary-refer-thread): Use it.
|
||||
|
||||
* nnimap.el (nnimap-request-thread): Use it.
|
||||
|
||||
2011-07-20 Lars Magne Ingebrigtsen <larsi@gnus.org>
|
||||
|
||||
* shr.el (shr-tag-comment): Ignore HTML comments.
|
||||
|
||||
2011-07-20 Andrew Cohen <cohen@andy.bu.edu>
|
||||
|
||||
* nnir.el (gnus-group-make-nnir-group): Allow optional search query
|
||||
|
|
|
@ -118,6 +118,13 @@ If t, fetch all the available old headers."
|
|||
:type '(choice number
|
||||
(sexp :menu-tag "other" t)))
|
||||
|
||||
(defcustom gnus-refer-thread-use-nnir nil
|
||||
"*Use nnir to search an entire server when referring threads. A
|
||||
nil value will only search for thread-related articles in the
|
||||
current group."
|
||||
:group 'gnus-thread
|
||||
:type 'boolean)
|
||||
|
||||
(defcustom gnus-summary-make-false-root 'adopt
|
||||
"*nil means that Gnus won't gather loose threads.
|
||||
If the root of a thread has expired or been read in a previous
|
||||
|
@ -8972,11 +8979,16 @@ Return the number of articles fetched."
|
|||
result))
|
||||
|
||||
(defun gnus-summary-refer-thread (&optional limit)
|
||||
"Fetch all articles in the current thread.
|
||||
If no backend-specific 'request-thread function is available
|
||||
fetch LIMIT (the numerical prefix) old headers. If LIMIT is nil
|
||||
fetch what's specified by the `gnus-refer-thread-limit'
|
||||
variable."
|
||||
"Fetch all articles in the current thread. For backends that
|
||||
know how to search for threads (currently only 'nnimap) a
|
||||
non-numeric prefix arg will use nnir to search the entire
|
||||
server; without a prefix arg only the current group is
|
||||
searched. If the variable `gnus-refer-thread-use-nnir' is
|
||||
non-nil the prefix arg has the reverse meaning. If no
|
||||
backend-specific 'request-thread function is available fetch
|
||||
LIMIT (the numerical prefix) old headers. If LIMIT is
|
||||
non-numeric or nil fetch the number specified by the
|
||||
`gnus-refer-thread-limit' variable."
|
||||
(interactive "P")
|
||||
(gnus-warp-to-article)
|
||||
(let* ((header (gnus-summary-article-header))
|
||||
|
@ -8984,13 +8996,16 @@ variable."
|
|||
(gnus-inhibit-demon t)
|
||||
(gnus-summary-ignore-duplicates t)
|
||||
(gnus-read-all-available-headers t)
|
||||
(limit (if limit (prefix-numeric-value limit)
|
||||
gnus-refer-thread-limit))
|
||||
(gnus-refer-thread-use-nnir
|
||||
(if (and (not (null limit)) (listp limit))
|
||||
(not gnus-refer-thread-use-nnir) gnus-refer-thread-use-nnir))
|
||||
(new-headers
|
||||
(if (gnus-check-backend-function
|
||||
'request-thread gnus-newsgroup-name)
|
||||
(gnus-request-thread header gnus-newsgroup-name)
|
||||
(let* ((last (if (numberp limit)
|
||||
(let* ((limit (if (numberp limit) (prefix-numeric-value limit)
|
||||
gnus-refer-thread-limit))
|
||||
(last (if (numberp limit)
|
||||
(min (+ (mail-header-number header)
|
||||
limit)
|
||||
gnus-newsgroup-highest)
|
||||
|
@ -9005,17 +9020,19 @@ variable."
|
|||
(regexp-opt (append refs (list id subject)))))))
|
||||
(gnus-fetch-headers (list last) (if (numberp limit)
|
||||
(* 2 limit) limit) t)))))
|
||||
(dolist (header new-headers)
|
||||
(when (member (mail-header-number header) gnus-newsgroup-unselected)
|
||||
(push (mail-header-number header) gnus-newsgroup-unreads)
|
||||
(setq gnus-newsgroup-unselected
|
||||
(delete (mail-header-number header) gnus-newsgroup-unselected))))
|
||||
(setq gnus-newsgroup-headers
|
||||
(gnus-delete-duplicate-headers
|
||||
(gnus-merge
|
||||
'list gnus-newsgroup-headers new-headers
|
||||
'gnus-article-sort-by-number)))
|
||||
(gnus-summary-limit-include-thread id)))
|
||||
(when (listp new-headers)
|
||||
(dolist (header new-headers)
|
||||
(when (member (mail-header-number header) gnus-newsgroup-unselected)
|
||||
(push (mail-header-number header) gnus-newsgroup-unreads)
|
||||
(setq gnus-newsgroup-unselected
|
||||
(delete (mail-header-number header)
|
||||
gnus-newsgroup-unselected))))
|
||||
(setq gnus-newsgroup-headers
|
||||
(gnus-delete-duplicate-headers
|
||||
(gnus-merge
|
||||
'list gnus-newsgroup-headers new-headers
|
||||
'gnus-article-sort-by-number)))
|
||||
(gnus-summary-limit-include-thread id))))
|
||||
|
||||
(defun gnus-summary-refer-article (message-id)
|
||||
"Fetch an article specified by MESSAGE-ID."
|
||||
|
|
|
@ -1566,15 +1566,17 @@ textual parts.")
|
|||
(articles &optional limit force-new dependencies))
|
||||
|
||||
(deffoo nnimap-request-thread (header &optional group server)
|
||||
(when (nnimap-possibly-change-group group server)
|
||||
(let* ((cmd (nnimap-make-thread-query header))
|
||||
(result (with-current-buffer (nnimap-buffer)
|
||||
(nnimap-command "UID SEARCH %s" cmd))))
|
||||
(when result
|
||||
(gnus-fetch-headers
|
||||
(and (car result) (delete 0 (mapcar #'string-to-number
|
||||
(cdr (assoc "SEARCH" (cdr result))))))
|
||||
nil t)))))
|
||||
(if gnus-refer-thread-use-nnir
|
||||
(nnir-search-thread header)
|
||||
(when (nnimap-possibly-change-group group server)
|
||||
(let* ((cmd (nnimap-make-thread-query header))
|
||||
(result (with-current-buffer (nnimap-buffer)
|
||||
(nnimap-command "UID SEARCH %s" cmd))))
|
||||
(when result
|
||||
(gnus-fetch-headers
|
||||
(and (car result) (delete 0 (mapcar #'string-to-number
|
||||
(cdr (assoc "SEARCH" (cdr result))))))
|
||||
nil t))))))
|
||||
|
||||
(defun nnimap-possibly-change-group (group server)
|
||||
(let ((open-result t))
|
||||
|
@ -1945,13 +1947,13 @@ textual parts.")
|
|||
(refs (split-string
|
||||
(or (mail-header-references header)
|
||||
"")))
|
||||
(value
|
||||
(format
|
||||
"(OR HEADER REFERENCES %s HEADER Message-Id %s)"
|
||||
id id)))
|
||||
(value
|
||||
(format
|
||||
"(OR HEADER REFERENCES %S HEADER Message-Id %S)"
|
||||
id id)))
|
||||
(dolist (refid refs value)
|
||||
(setq value (format
|
||||
"(OR (OR HEADER Message-Id %s HEADER REFERENCES %s) %s)"
|
||||
"(OR (OR HEADER Message-Id %S HEADER REFERENCES %S) %s)"
|
||||
refid refid value)))))
|
||||
|
||||
|
||||
|
|
|
@ -289,6 +289,7 @@ is `(valuefunc member)'."
|
|||
(autoload 'nnimap-buffer "nnimap")
|
||||
(autoload 'nnimap-command "nnimap")
|
||||
(autoload 'nnimap-possibly-change-group "nnimap")
|
||||
(autoload 'nnimap-make-thread-query "nnimap")
|
||||
(autoload 'gnus-registry-action "gnus-registry")
|
||||
(defvar gnus-registry-install))
|
||||
|
||||
|
@ -1649,6 +1650,16 @@ server is of form 'backend:name'."
|
|||
(nnir-open-server server)))
|
||||
|
||||
|
||||
(defun nnir-search-thread (header)
|
||||
"Make an nnir group based on the thread containing the article header"
|
||||
(let ((parm (list
|
||||
(cons 'query
|
||||
(nnimap-make-thread-query header))
|
||||
(cons 'criteria "")
|
||||
(cons 'server (gnus-method-to-server
|
||||
(gnus-find-method-for-group
|
||||
gnus-newsgroup-name))))))
|
||||
(gnus-group-make-nnir-group nil parm)))
|
||||
|
||||
;; unused?
|
||||
(defun nnir-artlist-groups (artlist)
|
||||
|
|
|
@ -761,6 +761,9 @@ ones, in case fg and bg are nil."
|
|||
(defun shr-tag-script (cont)
|
||||
)
|
||||
|
||||
(defun shr-tag-comment (cont)
|
||||
)
|
||||
|
||||
(defun shr-tag-sup (cont)
|
||||
(let ((start (point)))
|
||||
(shr-generic cont)
|
||||
|
|
|
@ -413,8 +413,8 @@ means display it in the right marginal area."
|
|||
(defun insert-image (image &optional string area slice)
|
||||
"Insert IMAGE into current buffer at point.
|
||||
IMAGE is displayed by inserting STRING into the current buffer
|
||||
with a `display' property whose value is the image. STRING is
|
||||
defaulted if you omit it.
|
||||
with a `display' property whose value is the image. STRING
|
||||
defaults to the empty string if you omit it.
|
||||
AREA is where to display the image. AREA nil or omitted means
|
||||
display it in the text area, a value of `left-margin' means
|
||||
display it in the left marginal area, a value of `right-margin'
|
||||
|
|
|
@ -935,14 +935,6 @@ IRC command completion is performed only if '/' is the first input char."
|
|||
map)
|
||||
"Keymap for rcirc mode.")
|
||||
|
||||
(defvar rcirc-browse-url-map
|
||||
(let ((map (make-sparse-keymap)))
|
||||
(define-key map (kbd "RET") 'rcirc-browse-url-at-point)
|
||||
(define-key map (kbd "<mouse-2>") 'rcirc-browse-url-at-mouse)
|
||||
(define-key map [follow-link] 'mouse-face)
|
||||
map)
|
||||
"Keymap used for browsing URLs in `rcirc-mode'.")
|
||||
|
||||
(defvar rcirc-short-buffer-name nil
|
||||
"Generated abbreviation to use to indicate buffer activity.")
|
||||
|
||||
|
@ -2351,21 +2343,6 @@ keywords when no KEYWORD is given."
|
|||
(browse-url (completing-read "rcirc browse-url: "
|
||||
completions nil nil initial-input 'history)
|
||||
arg)))
|
||||
|
||||
(defun rcirc-browse-url-at-point (point)
|
||||
"Send URL at point to `browse-url'."
|
||||
(interactive "d")
|
||||
(let ((beg (previous-single-property-change (1+ point) 'mouse-face))
|
||||
(end (next-single-property-change point 'mouse-face)))
|
||||
(browse-url (buffer-substring-no-properties beg end))))
|
||||
|
||||
(defun rcirc-browse-url-at-mouse (event)
|
||||
"Send URL at mouse click to `browse-url'."
|
||||
(interactive "e")
|
||||
(let ((position (event-end event)))
|
||||
(with-current-buffer (window-buffer (posn-window position))
|
||||
(rcirc-browse-url-at-point (posn-point position)))))
|
||||
|
||||
|
||||
(defun rcirc-markup-timestamp (sender response)
|
||||
(goto-char (point-min))
|
||||
|
@ -2406,12 +2383,16 @@ keywords when no KEYWORD is given."
|
|||
(while (and rcirc-url-regexp ;; nil means disable URL catching
|
||||
(re-search-forward rcirc-url-regexp nil t))
|
||||
(let ((start (match-beginning 0))
|
||||
(end (match-end 0)))
|
||||
(rcirc-add-face start end 'rcirc-url)
|
||||
(add-text-properties start end (list 'mouse-face 'highlight
|
||||
'keymap rcirc-browse-url-map))
|
||||
(end (match-end 0))
|
||||
(url (match-string-no-properties 0)))
|
||||
(make-button start end
|
||||
'face 'rcirc-url
|
||||
'follow-link t
|
||||
'rcirc-url url
|
||||
'action (lambda (button)
|
||||
(browse-url (button-get button 'rcirc-url))))
|
||||
;; record the url
|
||||
(push (buffer-substring-no-properties start end) rcirc-urls))))
|
||||
(push url rcirc-urls))))
|
||||
|
||||
(defun rcirc-markup-keywords (sender response)
|
||||
(when (and (string= response "PRIVMSG")
|
||||
|
|
|
@ -3457,8 +3457,10 @@ Fall back to normal file name handler if no Tramp handler exists."
|
|||
(defun tramp-maybe-send-script (vec script name)
|
||||
"Define in remote shell function NAME implemented as SCRIPT.
|
||||
Only send the definition if it has not already been done."
|
||||
(let* ((p (tramp-get-connection-process vec))
|
||||
(scripts (tramp-get-connection-property p "scripts" nil)))
|
||||
;; We cannot let-bind (tramp-get-connection-process vec) because it
|
||||
;; might be nil.
|
||||
(let ((scripts (tramp-get-connection-property
|
||||
(tramp-get-connection-process vec) "scripts" nil)))
|
||||
(unless (member name scripts)
|
||||
(tramp-with-progress-reporter vec 5 (format "Sending script `%s'" name)
|
||||
;; The script could contain a call of Perl. This is masked with `%s'.
|
||||
|
@ -3467,7 +3469,8 @@ Only send the definition if it has not already been done."
|
|||
(format "%s () {\n%s\n}" name
|
||||
(format script (tramp-get-remote-perl vec)))
|
||||
"Script %s sending failed" name)
|
||||
(tramp-set-connection-property p "scripts" (cons name scripts))))))
|
||||
(tramp-set-connection-property
|
||||
(tramp-get-connection-process vec) "scripts" (cons name scripts))))))
|
||||
|
||||
(defun tramp-set-auto-save ()
|
||||
(when (and ;; ange-ftp has its own auto-save mechanism
|
||||
|
@ -4505,27 +4508,30 @@ DONT-SUPPRESS-ERR is non-nil, stderr won't be sent to /dev/null."
|
|||
"Run COMMAND, check exit status, throw error if exit status not okay.
|
||||
Similar to `tramp-send-command-and-check' but accepts two more arguments
|
||||
FMT and ARGS which are passed to `error'."
|
||||
(unless (tramp-send-command-and-check vec command)
|
||||
(apply 'tramp-error vec 'file-error fmt args)))
|
||||
(or (tramp-send-command-and-check vec command)
|
||||
(apply 'tramp-error vec 'file-error fmt args)))
|
||||
|
||||
(defun tramp-send-command-and-read (vec command &optional noerror)
|
||||
"Run COMMAND and return the output, which must be a Lisp expression.
|
||||
In case there is no valid Lisp expression and NOERROR is nil, it
|
||||
raises an error."
|
||||
(tramp-barf-unless-okay vec command "`%s' returns with error" command)
|
||||
(with-current-buffer (tramp-get-connection-buffer vec)
|
||||
;; Read the expression.
|
||||
(goto-char (point-min))
|
||||
(condition-case nil
|
||||
(prog1 (read (current-buffer))
|
||||
;; Error handling.
|
||||
(when (re-search-forward "\\S-" (point-at-eol) t)
|
||||
(error nil)))
|
||||
(error (unless noerror
|
||||
(tramp-error
|
||||
vec 'file-error
|
||||
"`%s' does not return a valid Lisp expression: `%s'"
|
||||
command (buffer-string)))))))
|
||||
(when (if noerror
|
||||
(tramp-send-command-and-check vec command)
|
||||
(tramp-barf-unless-okay
|
||||
vec command "`%s' returns with error" command))
|
||||
(with-current-buffer (tramp-get-connection-buffer vec)
|
||||
;; Read the expression.
|
||||
(goto-char (point-min))
|
||||
(condition-case nil
|
||||
(prog1 (read (current-buffer))
|
||||
;; Error handling.
|
||||
(when (re-search-forward "\\S-" (point-at-eol) t)
|
||||
(error nil)))
|
||||
(error (unless noerror
|
||||
(tramp-error
|
||||
vec 'file-error
|
||||
"`%s' does not return a valid Lisp expression: `%s'"
|
||||
command (buffer-string))))))))
|
||||
|
||||
(defun tramp-convert-file-attributes (vec attr)
|
||||
"Convert file-attributes ATTR generated by perl script, stat or ls.
|
||||
|
|
|
@ -1876,7 +1876,17 @@ Falls back to normal file name handler if no Tramp file name handler exists."
|
|||
;; Call the backend function.
|
||||
(if foreign
|
||||
(condition-case err
|
||||
(apply foreign operation args)
|
||||
(let ((sf (symbol-function foreign)))
|
||||
;; Some packages set the default directory to a
|
||||
;; remote path, before respective Tramp packages
|
||||
;; are already loaded. This results in
|
||||
;; recursive loading. Therefore, we load the
|
||||
;; Tramp packages locally.
|
||||
(when (and (listp sf) (eq (car sf) 'autoload))
|
||||
(let ((default-directory
|
||||
(tramp-compat-temporary-file-directory)))
|
||||
(load (cadr sf) 'noerror)))
|
||||
(apply foreign operation args))
|
||||
|
||||
;; Trace that somebody has interrupted the operation.
|
||||
(quit
|
||||
|
|
|
@ -709,6 +709,9 @@ comment at the start of cc-engine.el for more info."
|
|||
;; content was found in the label. Note that we might still
|
||||
;; regard it a label if it starts with `c-label-kwds'.
|
||||
label-good-pos
|
||||
;; Putative positions of the components of a bitfield declaration,
|
||||
;; e.g. "int foo : NUM_FOO_BITS ;"
|
||||
bitfield-type-pos bitfield-id-pos bitfield-size-pos
|
||||
;; Symbol just scanned back over (e.g. 'while or 'boundary).
|
||||
;; See above.
|
||||
sym
|
||||
|
@ -765,13 +768,22 @@ comment at the start of cc-engine.el for more info."
|
|||
;; Record this as the first token if not starting inside it.
|
||||
(setq tok start))
|
||||
|
||||
;; The following while loop goes back one sexp (balanced parens,
|
||||
;; etc. with contents, or symbol or suchlike) each iteration. This
|
||||
;; movement is accomplished with a call to scan-sexps approx 130 lines
|
||||
;; below.
|
||||
|
||||
;; The following while loop goes back one sexp (balanced parens,
|
||||
;; etc. with contents, or symbol or suchlike) each iteration. This
|
||||
;; movement is accomplished with a call to c-backward-sexp approx 170
|
||||
;; lines below.
|
||||
;;
|
||||
;; The loop is exited only by throwing nil to the (catch 'loop ...):
|
||||
;; 1. On reaching the start of a macro;
|
||||
;; 2. On having passed a stmt boundary with the PDA stack empty;
|
||||
;; 3. On reaching the start of an Objective C method def;
|
||||
;; 4. From macro `c-bos-pop-state'; when the stack is empty;
|
||||
;; 5. From macro `c-bos-pop-state-and-retry' when the stack is empty.
|
||||
(while
|
||||
(catch 'loop ;; Throw nil to break, non-nil to continue.
|
||||
(cond
|
||||
;; Are we in a macro, just after the opening #?
|
||||
((save-excursion
|
||||
(and macro-start ; Always NIL for AWK.
|
||||
(progn (skip-chars-backward " \t")
|
||||
|
@ -792,7 +804,7 @@ comment at the start of cc-engine.el for more info."
|
|||
(setq pos saved
|
||||
ret 'macro
|
||||
ignore-labels t))
|
||||
(throw 'loop nil))
|
||||
(throw 'loop nil)) ; 1. Start of macro.
|
||||
|
||||
;; Do a round through the automaton if we've just passed a
|
||||
;; statement boundary or passed a "while"-like token.
|
||||
|
@ -801,7 +813,7 @@ comment at the start of cc-engine.el for more info."
|
|||
(setq sym (intern (match-string 1)))))
|
||||
|
||||
(when (and (< pos start) (null stack))
|
||||
(throw 'loop nil))
|
||||
(throw 'loop nil)) ; 2. Statement boundary.
|
||||
|
||||
;; The PDA state handling.
|
||||
;;
|
||||
|
@ -918,19 +930,14 @@ comment at the start of cc-engine.el for more info."
|
|||
;; HERE IS THE SINGLE PLACE INSIDE THE PDA LOOP WHERE WE MOVE
|
||||
;; BACKWARDS THROUGH THE SOURCE.
|
||||
|
||||
;; This is typically fast with the caching done by
|
||||
;; c-(backward|forward)-sws.
|
||||
(c-backward-syntactic-ws)
|
||||
|
||||
(let ((before-sws-pos (point))
|
||||
;; Set as long as we have to continue jumping by sexps.
|
||||
;; It's the position to use as end in the next round.
|
||||
sexp-loop-continue-pos
|
||||
;; The end position of the area to search for statement
|
||||
;; barriers in this round.
|
||||
(sexp-loop-end-pos pos))
|
||||
(maybe-after-boundary-pos pos))
|
||||
|
||||
;; The following while goes back one sexp per iteration.
|
||||
;; Go back over exactly one logical sexp, taking proper
|
||||
;; account of macros and escaped EOLs.
|
||||
(while
|
||||
(progn
|
||||
(unless (c-safe (c-backward-sexp) t)
|
||||
|
@ -938,81 +945,87 @@ comment at the start of cc-engine.el for more info."
|
|||
;; stack won't be empty the code below will report a
|
||||
;; suitable error.
|
||||
(throw 'loop nil))
|
||||
(cond
|
||||
;; Have we moved into a macro?
|
||||
((and (not macro-start)
|
||||
(c-beginning-of-macro))
|
||||
;; Have we crossed a statement boundary? If not,
|
||||
;; keep going back until we find one or a "real" sexp.
|
||||
(and
|
||||
(save-excursion
|
||||
(c-end-of-macro)
|
||||
(not (c-crosses-statement-barrier-p
|
||||
(point) maybe-after-boundary-pos)))
|
||||
(setq maybe-after-boundary-pos (point))))
|
||||
;; Have we just gone back over an escaped NL? This
|
||||
;; doesn't count as a sexp.
|
||||
((looking-at "\\\\$")))))
|
||||
|
||||
;; Check if the sexp movement crossed a statement or
|
||||
;; declaration boundary. But first modify the point
|
||||
;; so that `c-crosses-statement-barrier-p' only looks
|
||||
;; at the non-sexp chars following the sexp.
|
||||
(save-excursion
|
||||
(when (setq
|
||||
boundary-pos
|
||||
(cond
|
||||
((if macro-start
|
||||
nil
|
||||
(save-excursion
|
||||
(when (c-beginning-of-macro)
|
||||
;; Set continuation position in case
|
||||
;; `c-crosses-statement-barrier-p'
|
||||
;; doesn't detect anything below.
|
||||
(setq sexp-loop-continue-pos (point)))))
|
||||
;; If the sexp movement took us into a
|
||||
;; macro then there were only some non-sexp
|
||||
;; chars after it. Skip out of the macro
|
||||
;; to analyze them but not the non-sexp
|
||||
;; chars that might be inside the macro.
|
||||
(c-end-of-macro)
|
||||
(c-crosses-statement-barrier-p
|
||||
(point) sexp-loop-end-pos))
|
||||
|
||||
((and
|
||||
(eq (char-after) ?{)
|
||||
(not (c-looking-at-inexpr-block lim nil t)))
|
||||
;; Passed a block sexp. That's a boundary
|
||||
;; alright.
|
||||
(point))
|
||||
|
||||
((looking-at "\\s\(")
|
||||
;; Passed some other paren. Only analyze
|
||||
;; the non-sexp chars after it.
|
||||
(goto-char (1+ (c-down-list-backward
|
||||
before-sws-pos)))
|
||||
;; We're at a valid token start position
|
||||
;; (outside the `save-excursion') if
|
||||
;; `c-crosses-statement-barrier-p' failed.
|
||||
(c-crosses-statement-barrier-p
|
||||
(point) sexp-loop-end-pos))
|
||||
|
||||
(t
|
||||
;; Passed a symbol sexp or line
|
||||
;; continuation. It doesn't matter that
|
||||
;; it's included in the analyzed region.
|
||||
(if (c-crosses-statement-barrier-p
|
||||
(point) sexp-loop-end-pos)
|
||||
t
|
||||
;; If it was a line continuation then we
|
||||
;; have to continue looping.
|
||||
(if (looking-at "\\\\$")
|
||||
(setq sexp-loop-continue-pos (point)))
|
||||
nil))))
|
||||
|
||||
(setq pptok ptok
|
||||
ptok tok
|
||||
tok boundary-pos
|
||||
sym 'boundary)
|
||||
;; Like a C "continue". Analyze the next sexp.
|
||||
(throw 'loop t)))
|
||||
|
||||
sexp-loop-continue-pos) ; End of "go back a sexp" loop condition.
|
||||
(goto-char sexp-loop-continue-pos)
|
||||
(setq sexp-loop-end-pos sexp-loop-continue-pos
|
||||
sexp-loop-continue-pos nil))))
|
||||
;; Have we crossed a statement boundary?
|
||||
(setq boundary-pos
|
||||
(cond
|
||||
;; Are we at a macro beginning?
|
||||
((and (not macro-start)
|
||||
c-opt-cpp-prefix
|
||||
(looking-at c-opt-cpp-prefix))
|
||||
(save-excursion
|
||||
(c-end-of-macro)
|
||||
(c-crosses-statement-barrier-p
|
||||
(point) maybe-after-boundary-pos)))
|
||||
;; Just gone back over a brace block?
|
||||
((and
|
||||
(eq (char-after) ?{)
|
||||
(not (c-looking-at-inexpr-block lim nil t)))
|
||||
(save-excursion
|
||||
(c-forward-sexp) (point)))
|
||||
;; Just gone back over some paren block?
|
||||
((looking-at "\\s\(")
|
||||
(save-excursion
|
||||
(goto-char (1+ (c-down-list-backward
|
||||
before-sws-pos)))
|
||||
(c-crosses-statement-barrier-p
|
||||
(point) maybe-after-boundary-pos)))
|
||||
;; Just gone back over an ordinary symbol of some sort?
|
||||
(t (c-crosses-statement-barrier-p
|
||||
(point) maybe-after-boundary-pos))))
|
||||
|
||||
(when boundary-pos
|
||||
(setq pptok ptok
|
||||
ptok tok
|
||||
tok boundary-pos
|
||||
sym 'boundary)
|
||||
;; Like a C "continue". Analyze the next sexp.
|
||||
(throw 'loop t))))
|
||||
|
||||
;; ObjC method def?
|
||||
(when (and c-opt-method-key
|
||||
(setq saved (c-in-method-def-p)))
|
||||
(setq pos saved
|
||||
ignore-labels t) ; Avoid the label check on exit.
|
||||
(throw 'loop nil))
|
||||
(throw 'loop nil)) ; 3. ObjC method def.
|
||||
|
||||
;; Might we have a bitfield declaration, "<type> <id> : <size>"?
|
||||
(if c-has-bitfields
|
||||
(cond
|
||||
;; The : <size> and <id> fields?
|
||||
((and (numberp c-maybe-labelp)
|
||||
(not bitfield-size-pos)
|
||||
(save-excursion
|
||||
(goto-char (or tok start))
|
||||
(not (looking-at c-keywords-regexp)))
|
||||
(not (looking-at c-keywords-regexp))
|
||||
(not (c-punctuation-in (point) c-maybe-labelp)))
|
||||
(setq bitfield-size-pos (or tok start)
|
||||
bitfield-id-pos (point)))
|
||||
;; The <type> field?
|
||||
((and bitfield-id-pos
|
||||
(not bitfield-type-pos))
|
||||
(if (and (looking-at c-symbol-key) ; Can only be an integer type. :-)
|
||||
(not (looking-at c-not-primitive-type-keywords-regexp))
|
||||
(not (c-punctuation-in (point) tok)))
|
||||
(setq bitfield-type-pos (point))
|
||||
(setq bitfield-size-pos nil
|
||||
bitfield-id-pos nil)))))
|
||||
|
||||
;; Handle labels.
|
||||
(unless (eq ignore-labels t)
|
||||
|
@ -1044,8 +1057,10 @@ comment at the start of cc-engine.el for more info."
|
|||
pptok ptok
|
||||
ptok tok
|
||||
tok (point)
|
||||
pos tok))) ; Not nil (for the while loop).
|
||||
|
||||
pos tok) ; always non-nil
|
||||
) ; end of (catch loop ....)
|
||||
) ; end of sexp-at-a-time (while ....)
|
||||
|
||||
;; If the stack isn't empty there might be errors to report.
|
||||
(while stack
|
||||
(if (and (vectorp saved-pos) (eq (length saved-pos) 3))
|
||||
|
@ -1067,6 +1082,7 @@ comment at the start of cc-engine.el for more info."
|
|||
(eq c-maybe-labelp t)
|
||||
(not (eq ret 'beginning))
|
||||
after-labels-pos
|
||||
(not bitfield-type-pos) ; Bitfields take precedence over labels.
|
||||
(or (not label-good-pos)
|
||||
(<= label-good-pos pos)
|
||||
(progn
|
||||
|
@ -1104,6 +1120,19 @@ comment at the start of cc-engine.el for more info."
|
|||
(goto-char pos)
|
||||
ret)))
|
||||
|
||||
(defun c-punctuation-in (from to)
|
||||
"Return non-nil if there is a non-comment non-macro punctuation character
|
||||
between FROM and TO. FROM must not be in a string or comment. The returned
|
||||
value is the position of the first such character."
|
||||
(save-excursion
|
||||
(goto-char from)
|
||||
(let ((pos (point)))
|
||||
(while (progn (skip-chars-forward c-symbol-chars to)
|
||||
(c-forward-syntactic-ws to)
|
||||
(> (point) pos))
|
||||
(setq pos (point))))
|
||||
(and (< (point) to) (point))))
|
||||
|
||||
(defun c-crosses-statement-barrier-p (from to)
|
||||
"Return non-nil if buffer positions FROM to TO cross one or more
|
||||
statement or declaration boundaries. The returned value is actually
|
||||
|
@ -6618,19 +6647,27 @@ comment at the start of cc-engine.el for more info."
|
|||
(if backup-at-type
|
||||
(progn
|
||||
|
||||
;; CASE 3
|
||||
(when (= (point) start)
|
||||
;; Got a plain list of identifiers. If a colon follows it's
|
||||
;; a valid label. Otherwise the last one probably is the
|
||||
;; declared identifier and we should back up to the previous
|
||||
;; type, providing it isn't a cast.
|
||||
|
||||
;; CASE 3
|
||||
(when (= (point) start)
|
||||
;; Got a plain list of identifiers. If a colon follows it's
|
||||
;; a valid label, or maybe a bitfield. Otherwise the last
|
||||
;; one probably is the declared identifier and we should
|
||||
;; back up to the previous type, providing it isn't a cast.
|
||||
(if (and (eq (char-after) ?:)
|
||||
(not (c-major-mode-is 'java-mode)))
|
||||
;; If we've found a specifier keyword then it's a
|
||||
;; declaration regardless.
|
||||
(throw 'at-decl-or-cast (eq at-decl-or-cast t))
|
||||
(setq backup-if-not-cast t)
|
||||
(throw 'at-decl-or-cast t)))
|
||||
(cond
|
||||
;; If we've found a specifier keyword then it's a
|
||||
;; declaration regardless.
|
||||
((eq at-decl-or-cast t)
|
||||
(throw 'at-decl-or-cast t))
|
||||
((and c-has-bitfields
|
||||
(eq at-decl-or-cast 'ids)) ; bitfield.
|
||||
(setq backup-if-not-cast t)
|
||||
(throw 'at-decl-or-cast t)))
|
||||
|
||||
(setq backup-if-not-cast t)
|
||||
(throw 'at-decl-or-cast t)))
|
||||
|
||||
;; CASE 4
|
||||
(when (and got-suffix
|
||||
|
|
|
@ -1179,6 +1179,14 @@ casts and declarations are fontified. Used on level 2 and higher."
|
|||
(goto-char start-pos)))
|
||||
|
||||
;; Now analyze the construct.
|
||||
;; In QT, "more" is an irritating keyword that expands to nothing.
|
||||
;; We skip over it to prevent recognition of "more slots: <symbol>"
|
||||
;; as a bitfield declaration.
|
||||
(when (and (c-major-mode-is 'c++-mode)
|
||||
(looking-at
|
||||
(concat "\\(more\\)\\([^" c-symbol-chars "]\\|$\\)")))
|
||||
(goto-char (match-end 1))
|
||||
(c-forward-syntactic-ws))
|
||||
(setq decl-or-cast (c-forward-decl-or-cast-1
|
||||
match-pos context last-cast-end))
|
||||
|
||||
|
|
|
@ -511,6 +511,12 @@ parameters \(point-min), \(point-max) and <buffer size>."
|
|||
|
||||
;;; Lexer-level syntax (identifiers, tokens etc).
|
||||
|
||||
(c-lang-defconst c-has-bitfields
|
||||
"Whether the language has bitfield declarations."
|
||||
t nil
|
||||
(c c++ objc) t)
|
||||
(c-lang-defvar c-has-bitfields (c-lang-const c-has-bitfields))
|
||||
|
||||
(c-lang-defconst c-symbol-start
|
||||
"Regexp that matches the start of a symbol, i.e. any identifier or
|
||||
keyword. It's unspecified how far it matches. Does not contain a \\|
|
||||
|
@ -528,6 +534,7 @@ This is of the form that fits inside [ ] in a regexp."
|
|||
;; operator chars too, but they are handled with other means instead.
|
||||
t (concat c-alnum "_$")
|
||||
objc (concat c-alnum "_$@"))
|
||||
(c-lang-defvar c-symbol-chars (c-lang-const c-symbol-chars))
|
||||
|
||||
(c-lang-defconst c-symbol-key
|
||||
"Regexp matching identifiers and keywords (with submatch 0). Assumed
|
||||
|
@ -1927,6 +1934,21 @@ one of `c-type-list-kwds', `c-ref-list-kwds',
|
|||
(c-lang-defvar c-not-decl-init-keywords
|
||||
(c-lang-const c-not-decl-init-keywords))
|
||||
|
||||
(c-lang-defconst c-not-primitive-type-keywords
|
||||
"List of all keywords apart from primitive types (like \"int\")."
|
||||
t (set-difference (c-lang-const c-keywords)
|
||||
(c-lang-const c-primitive-type-kwds)
|
||||
:test 'string-equal)
|
||||
;; The "more" for C++ is the QT keyword (as in "more slots:").
|
||||
;; This variable is intended for use in c-beginning-of-statement-1.
|
||||
c++ (append (c-lang-const c-not-primitive-type-keywords) '("more")))
|
||||
|
||||
(c-lang-defconst c-not-primitive-type-keywords-regexp
|
||||
t (c-make-keywords-re t
|
||||
(c-lang-const c-not-primitive-type-keywords)))
|
||||
(c-lang-defvar c-not-primitive-type-keywords-regexp
|
||||
(c-lang-const c-not-primitive-type-keywords-regexp))
|
||||
|
||||
(c-lang-defconst c-protection-kwds
|
||||
"Access protection label keywords in classes."
|
||||
t nil
|
||||
|
@ -3092,10 +3114,9 @@ accomplish that conveniently."
|
|||
;; ',mode ,c-version c-version)
|
||||
;; (put ',mode 'c-has-warned-lang-consts t))
|
||||
|
||||
(require 'cc-langs)
|
||||
(setq source-eval t)
|
||||
(let ((init (append (cdr c-emacs-variable-inits)
|
||||
(cdr c-lang-variable-inits))))
|
||||
(let ((init ',(append (cdr c-emacs-variable-inits)
|
||||
(cdr c-lang-variable-inits))))
|
||||
(while init
|
||||
(setq current-var (caar init))
|
||||
(set (caar init) (eval (cadar init)))
|
||||
|
|
|
@ -120,11 +120,6 @@
|
|||
; '
|
||||
(require 'cc-fonts) ;)
|
||||
|
||||
;; cc-langs isn't loaded when we're byte compiled, so add autoload
|
||||
;; directives for the interface functions.
|
||||
(autoload 'c-make-init-lang-vars-fun "cc-langs")
|
||||
(autoload 'c-init-language-vars "cc-langs" nil nil 'macro)
|
||||
|
||||
|
||||
;; Other modes and packages which depend on CC Mode should do the
|
||||
;; following to make sure everything is loaded and available for their
|
||||
|
|
|
@ -1260,11 +1260,11 @@ buffer-local values of tags table format variables."
|
|||
(defun etags-file-of-tag (&optional relative) ; Doc string?
|
||||
(save-excursion
|
||||
(re-search-backward "\f\n\\([^\n]+\\),[0-9]*\n")
|
||||
(let ((str (buffer-substring (match-beginning 1) (match-end 1))))
|
||||
(let ((str (convert-standard-filename
|
||||
(buffer-substring (match-beginning 1) (match-end 1)))))
|
||||
(if relative
|
||||
str
|
||||
(expand-file-name str
|
||||
(file-truename default-directory))))))
|
||||
(expand-file-name str (file-truename default-directory))))))
|
||||
|
||||
|
||||
(defun etags-tags-completion-table () ; Doc string?
|
||||
|
@ -1545,7 +1545,9 @@ hits the start of file."
|
|||
(end-of-line)
|
||||
(skip-chars-backward "^," beg)
|
||||
(or (looking-at "include$")
|
||||
(setq files (cons (buffer-substring beg (1- (point))) files))))
|
||||
(push (convert-standard-filename
|
||||
(buffer-substring beg (1- (point))))
|
||||
files)))
|
||||
(nreverse files)))
|
||||
|
||||
(defun etags-tags-included-tables () ; Doc string?
|
||||
|
@ -1556,10 +1558,11 @@ hits the start of file."
|
|||
(setq beg (point))
|
||||
(end-of-line)
|
||||
(skip-chars-backward "^," beg)
|
||||
(if (looking-at "include$")
|
||||
;; Expand in the default-directory of the tags table buffer.
|
||||
(setq files (cons (expand-file-name (buffer-substring beg (1- (point))))
|
||||
files))))
|
||||
(when (looking-at "include$")
|
||||
;; Expand in the default-directory of the tags table buffer.
|
||||
(push (expand-file-name (convert-standard-filename
|
||||
(buffer-substring beg (1- (point)))))
|
||||
files)))
|
||||
(nreverse files)))
|
||||
|
||||
;; Empty tags file support.
|
||||
|
|
|
@ -5051,14 +5051,22 @@ description."
|
|||
(funcall side window)))))
|
||||
|
||||
(when (window-live-p window)
|
||||
;; Adjust sizes if asked for.
|
||||
(display-buffer-set-height window specifiers)
|
||||
(display-buffer-set-width window specifiers)
|
||||
;; In `quit-restore' parameter record that we popped up
|
||||
;; this window, its buffer and which window was selected.
|
||||
(set-window-parameter
|
||||
window 'quit-restore (list 'new-window buffer selected-window))
|
||||
;; For `display-buffer-window' mark window as new.
|
||||
(setq display-buffer-window (cons window 'new-window))
|
||||
;; Install BUFFER in the new window.
|
||||
(display-buffer-in-window buffer window specifiers)
|
||||
;; Adjust sizes if asked for (for `fit-window-to-buffer'
|
||||
;; and friends BUFFER must be already shown in the new
|
||||
;; window).
|
||||
(display-buffer-set-height window specifiers)
|
||||
(display-buffer-set-width window specifiers)
|
||||
;; Reset list of window's previous buffers to nil.
|
||||
(set-window-prev-buffers window nil)
|
||||
;; Return the new window.
|
||||
(throw 'done window))))))))
|
||||
|
||||
(defun display-buffer-pop-up-frame (buffer &optional graphic-only specifiers)
|
||||
|
@ -5113,26 +5121,33 @@ failed."
|
|||
(display-buffer-split-window main-or-root on-side specifiers))
|
||||
fun)
|
||||
(when window
|
||||
;; We were able to split off a new window.
|
||||
(unless main
|
||||
(walk-window-subtree
|
||||
(lambda (window)
|
||||
;; Make all main-or-root subwindows main windows.
|
||||
(set-window-parameter window 'window-side 'none))
|
||||
main-or-root t))
|
||||
;; Make sure that parent's window-side is nil.
|
||||
;; Reset window-side parameter of new window's parent to nil.
|
||||
(set-window-parameter (window-parent window) 'window-side nil)
|
||||
;; Initialize side.
|
||||
;; Initialize window-side parameter of new window to SIDE.
|
||||
(set-window-parameter window 'window-side side)
|
||||
;; Adjust sizes if asked for.
|
||||
(display-buffer-set-height window specifiers)
|
||||
(display-buffer-set-width window specifiers)
|
||||
;; Set window parameters.
|
||||
;; Install window-slot parameter of new window.
|
||||
(set-window-parameter window 'window-slot slot)
|
||||
;; In `quit-restore' parameter record that we popped up a new
|
||||
;; window.
|
||||
(set-window-parameter
|
||||
window 'quit-restore (list 'new-window buffer selected-window))
|
||||
;; For `display-buffer-window' mark window as new.
|
||||
(setq display-buffer-window (cons window 'new-window))
|
||||
(set-window-parameter window 'window-slot slot)
|
||||
;; Install BUFFER in new window.
|
||||
(display-buffer-in-window buffer window specifiers)
|
||||
;; Adjust sizes of new window if asked for.
|
||||
(display-buffer-set-height window specifiers)
|
||||
(display-buffer-set-width window specifiers)
|
||||
;; Reset list of new window's previous buffers to nil.
|
||||
(set-window-prev-buffers window nil)
|
||||
;; Return the new window.
|
||||
window)))
|
||||
|
||||
(defun display-buffer-in-side-window (buffer side &optional slot specifiers)
|
||||
|
@ -5160,7 +5175,7 @@ SPECIFIERS must be a list of buffer display specifiers."
|
|||
window-sides-slots))
|
||||
(selected-window (selected-window))
|
||||
window this-window this-slot prev-window next-window
|
||||
best-window best-slot abs-slot dedicated)
|
||||
best-window best-slot abs-slot dedicated new-window)
|
||||
|
||||
(unless (numberp slot)
|
||||
(setq slot 0))
|
||||
|
@ -5233,13 +5248,16 @@ SPECIFIERS must be a list of buffer display specifiers."
|
|||
(setq window (display-buffer-split-window
|
||||
prev-window prev-side specifiers)))))
|
||||
(progn
|
||||
(display-buffer-set-height window specifiers)
|
||||
(display-buffer-set-width window specifiers)
|
||||
;; In `quit-restore' parameter record that we popped up
|
||||
;; this window, its buffer and the old selected window.
|
||||
(set-window-parameter
|
||||
window 'quit-restore
|
||||
(list 'new-window buffer selected-window))
|
||||
;; For `display-buffer-window' mark window as new.
|
||||
(setq display-buffer-window (cons window 'new-window))
|
||||
window))
|
||||
;; Record that window is new, we need this for
|
||||
;; adjusting sizes below.
|
||||
(setq new-window window)))
|
||||
(and best-window
|
||||
(setq window best-window)
|
||||
;; Reuse best window (the window nearest to SLOT).
|
||||
|
@ -5262,7 +5280,17 @@ SPECIFIERS must be a list of buffer display specifiers."
|
|||
(unless (window-parameter window 'window-slot)
|
||||
;; Don't change exisiting slot value.
|
||||
(set-window-parameter window 'window-slot slot))
|
||||
(display-buffer-in-window buffer window specifiers)))))
|
||||
;; Install BUFFER in the window.
|
||||
(display-buffer-in-window buffer window specifiers)
|
||||
(when new-window
|
||||
;; Adjust sizes if asked for (for `fit-window-to-buffer' and
|
||||
;; friends BUFFER must be already shown in the new window).
|
||||
(display-buffer-set-height window specifiers)
|
||||
(display-buffer-set-width window specifiers)
|
||||
;; Reset list of new window's previous buffers to nil.
|
||||
(set-window-prev-buffers window nil))
|
||||
;; Return the window used.
|
||||
window))))
|
||||
|
||||
(defun window-normalize-buffer-to-display (buffer-or-name)
|
||||
"Normalize BUFFER-OR-NAME argument for buffer display functions.
|
||||
|
@ -6926,7 +6954,7 @@ WINDOW was scrolled."
|
|||
;; `with-selected-window' should orderly restore the current buffer.
|
||||
(with-selected-window window
|
||||
;; We are in WINDOW's buffer now.
|
||||
(let* ( ;; Adjust MIN-HEIGHT.
|
||||
(let* (;; Adjust MIN-HEIGHT.
|
||||
(min-height
|
||||
(if override
|
||||
(window-min-size window nil window)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
2011-07-19 Paul Eggert <eggert@cs.ucla.edu>
|
||||
2011-07-28 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Integer signedness and overflow and related fixes. (Bug#9079)
|
||||
|
||||
|
@ -197,6 +197,101 @@
|
|||
Use EMACS_INT, not EMACS_UINT, for sizes. The code works equally
|
||||
well either way, and we prefer signed to unsigned.
|
||||
|
||||
2011-07-27 Lars Magne Ingebrigtsen <larsi@gnus.org>
|
||||
|
||||
* gnutls.c (emacs_gnutls_read): Don't message anything if the peer
|
||||
closes the connection while we're reading (bug#9182).
|
||||
|
||||
2011-07-25 Jan Djärv <jan.h.d@swipnet.se>
|
||||
|
||||
* nsmenu.m (ns_popup_dialog): Add an "ok" button if no buttons
|
||||
are specified (Bug#9168).
|
||||
|
||||
2011-07-25 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* bidi.c (bidi_dump_cached_states): Fix printf format mismatch.
|
||||
Found by GCC static checking and --with-wide-int on a 32-bit host.
|
||||
|
||||
2011-07-25 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* xdisp.c (compute_display_string_pos): Fix logic of caching
|
||||
previous display string position. Initialize cached_prev_pos to
|
||||
-1. Fixes slow-down at the beginning of a buffer.
|
||||
|
||||
2011-07-24 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* xfaces.c (check_lface_attrs) [HAVE_WINDOW_SYSTEM]: Allow `nil'
|
||||
for attrs[LFACE_FONTSET_INDEX].
|
||||
|
||||
2011-07-23 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* xml.c (parse_region): Remove unused local
|
||||
that was recently introduced.
|
||||
|
||||
2011-07-23 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* xfns.c (unwind_create_frame) [GLYPH_DEBUG]: Adapt to changes in
|
||||
2008-02-22T17:42:09Z!monnier@iro.umontreal.ca.
|
||||
|
||||
* xdisp.c (move_it_in_display_line_to): Record the best matching
|
||||
position for TO_CHARPOS while scanning the line, and restore it on
|
||||
exit if none of the characters scanned was an exact match. Fixes
|
||||
vertical-motion and pos-visible-in-window-p under bidi redisplay
|
||||
when exact match is impossible due to invisible text, and the
|
||||
lines are truncated.
|
||||
|
||||
2011-07-23 Jan Djärv <jan.h.d@swipnet.se>
|
||||
|
||||
* nsterm.m (initFrameFromEmacs): Set NSTitledWindowMask in styleMask
|
||||
for OSX >= 10.7.
|
||||
|
||||
2011-07-22 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
Fix a significant slow-down of cursor motion with C-n, C-p,
|
||||
C-f/C-b, and C-v/M-v that couldn't keep up with keyboard
|
||||
auto-repeat under bidi redisplay in fontified buffers.
|
||||
* xdisp.c (compute_stop_pos_backwards): New function.
|
||||
(next_element_from_buffer): Call compute_stop_pos_backwards to
|
||||
find a suitable prev_stop when we find ourselves before
|
||||
base_level_stop.
|
||||
(reseat): Don't look for prev_stop, as that could mean a very long
|
||||
run.
|
||||
<cached_disp_pos, cached_disp_buffer, cached_disp_modiff>
|
||||
<cached_disp_overlay_modiff>: Cache for last found display string
|
||||
position.
|
||||
(compute_display_string_pos): Return the cached position if asked
|
||||
about the same buffer in the same area of character positions, and
|
||||
the buffer wasn't changed since the time the display string
|
||||
position was cached.
|
||||
|
||||
2011-07-22 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* xdisp.c (rows_from_pos_range): Don't ignore glyphs whose object
|
||||
is an integer, which is important for empty lines. (Bug#9149)
|
||||
|
||||
2011-07-22 Chong Yidong <cyd@stupidchicken.com>
|
||||
|
||||
* frame.c (Fmodify_frame_parameters): In tty case, update the
|
||||
default face if necessary (Bug#4238).
|
||||
|
||||
2011-07-21 Chong Yidong <cyd@stupidchicken.com>
|
||||
|
||||
* editfns.c (Fstring_to_char): No need to explain what a character
|
||||
is in the docstring (Bug#6576).
|
||||
|
||||
2011-07-20 Lars Magne Ingebrigtsen <larsi@gnus.org>
|
||||
|
||||
* xml.c (parse_region): Make sure we always return a tree.
|
||||
|
||||
2011-07-20 HAMANO Kiyoto <khiker.mail@gmail.com>
|
||||
|
||||
* xml.c (parse_region): If a document contains only comments,
|
||||
return that, too.
|
||||
|
||||
2011-07-20 Lars Magne Ingebrigtsen <larsi@gnus.org>
|
||||
|
||||
* xml.c (make_dom): Return comments, too.
|
||||
|
||||
2011-07-19 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
Port to OpenBSD.
|
||||
|
|
|
@ -2319,7 +2319,7 @@ bidi_dump_cached_states (void)
|
|||
fprintf (stderr, "The cache is empty.\n");
|
||||
return;
|
||||
}
|
||||
fprintf (stderr, "Total of %"pD"d state%s in cache:\n",
|
||||
fprintf (stderr, "Total of %"pI"d state%s in cache:\n",
|
||||
bidi_cache_idx, bidi_cache_idx == 1 ? "" : "s");
|
||||
|
||||
for (i = bidi_cache[bidi_cache_idx - 1].charpos; i > 0; i /= 10)
|
||||
|
|
|
@ -194,12 +194,7 @@ DEFUN ("byte-to-string", Fbyte_to_string, Sbyte_to_string, 1, 1, 0,
|
|||
}
|
||||
|
||||
DEFUN ("string-to-char", Fstring_to_char, Sstring_to_char, 1, 1, 0,
|
||||
doc: /* Return the first character in STRING.
|
||||
A multibyte character is handled correctly.
|
||||
The value returned is a Unicode codepoint if it is below #x110000 (in
|
||||
hex). Codepoints beyond that are Emacs extensions of Unicode. In
|
||||
particular, eight-bit characters are returned as codepoints in the
|
||||
range #x3FFF80 through #x3FFFFF, inclusive. */)
|
||||
doc: /* Return the first character in STRING. */)
|
||||
(register Lisp_Object string)
|
||||
{
|
||||
register Lisp_Object val;
|
||||
|
|
|
@ -2437,11 +2437,9 @@ use is not recommended. Explicitly check for a frame-parameter instead. */)
|
|||
val = values[i];
|
||||
store_frame_param (f, prop, val);
|
||||
|
||||
/* Changing the background color might change the background
|
||||
mode, so that we have to load new defface specs.
|
||||
Call frame-set-background-mode to do that. */
|
||||
if (EQ (prop, Qbackground_color))
|
||||
call1 (Qframe_set_background_mode, frame);
|
||||
if (EQ (prop, Qforeground_color)
|
||||
|| EQ (prop, Qbackground_color))
|
||||
update_face_from_frame_parameter (f, prop, val);
|
||||
}
|
||||
}
|
||||
return Qnil;
|
||||
|
|
|
@ -382,6 +382,9 @@ emacs_gnutls_read (struct Lisp_Process *proc, char *buf, EMACS_INT nbyte)
|
|||
rtnval = fn_gnutls_record_recv (state, buf, nbyte);
|
||||
if (rtnval >= 0)
|
||||
return rtnval;
|
||||
else if (rtnval == GNUTLS_E_UNEXPECTED_PACKET_LENGTH)
|
||||
/* The peer closed the connection. */
|
||||
return 0;
|
||||
else if (emacs_gnutls_handle_error (state, rtnval) == 0)
|
||||
/* non-fatal error */
|
||||
return -1;
|
||||
|
|
10
src/nsmenu.m
10
src/nsmenu.m
|
@ -1340,7 +1340,7 @@ - (NSRect) frame
|
|||
ns_popup_dialog (Lisp_Object position, Lisp_Object contents, Lisp_Object header)
|
||||
{
|
||||
id dialog;
|
||||
Lisp_Object window, tem;
|
||||
Lisp_Object window, tem, title;
|
||||
struct frame *f;
|
||||
NSPoint p;
|
||||
BOOL isQ;
|
||||
|
@ -1389,6 +1389,14 @@ - (NSRect) frame
|
|||
p.x = (int)f->left_pos + ((int)FRAME_COLUMN_WIDTH (f) * f->text_cols)/2;
|
||||
p.y = (int)f->top_pos + (FRAME_LINE_HEIGHT (f) * f->text_lines)/2;
|
||||
|
||||
title = Fcar (contents);
|
||||
CHECK_STRING (title);
|
||||
|
||||
if (NILP (Fcar (Fcdr (contents))))
|
||||
/* No buttons specified, add an "Ok" button so users can pop down
|
||||
the dialog. */
|
||||
contents = Fcons (title, Fcons (Fcons (build_string ("Ok"), Qt), Qnil));
|
||||
|
||||
BLOCK_INPUT;
|
||||
dialog = [[EmacsDialogPanel alloc] initFromContents: contents
|
||||
isQuestion: isQ];
|
||||
|
|
|
@ -5304,6 +5304,9 @@ - (BOOL)isOpaque
|
|||
win = [[EmacsWindow alloc]
|
||||
initWithContentRect: r
|
||||
styleMask: (NSResizableWindowMask |
|
||||
#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7
|
||||
NSTitledWindowMask |
|
||||
#endif
|
||||
NSMiniaturizableWindowMask |
|
||||
NSClosableWindowMask)
|
||||
backing: NSBackingStoreBuffered
|
||||
|
|
194
src/xdisp.c
194
src/xdisp.c
|
@ -3134,6 +3134,14 @@ next_overlay_change (EMACS_INT pos)
|
|||
return endpos;
|
||||
}
|
||||
|
||||
/* Record one cached display string position found recently by
|
||||
compute_display_string_pos. */
|
||||
static EMACS_INT cached_disp_pos;
|
||||
static EMACS_INT cached_prev_pos = -1;
|
||||
static struct buffer *cached_disp_buffer;
|
||||
static int cached_disp_modiff;
|
||||
static int cached_disp_overlay_modiff;
|
||||
|
||||
/* Return the character position of a display string at or after
|
||||
position specified by POSITION. If no display string exists at or
|
||||
after POSITION, return ZV. A display string is either an overlay
|
||||
|
@ -3155,6 +3163,7 @@ compute_display_string_pos (struct text_pos *position,
|
|||
EMACS_INT begb = string_p ? 0 : BEGV;
|
||||
EMACS_INT bufpos, charpos = CHARPOS (*position);
|
||||
struct text_pos tpos;
|
||||
struct buffer *b;
|
||||
|
||||
if (charpos >= eob
|
||||
/* We don't support display properties whose values are strings
|
||||
|
@ -3164,6 +3173,37 @@ compute_display_string_pos (struct text_pos *position,
|
|||
|| (string->s && !STRINGP (object)))
|
||||
return eob;
|
||||
|
||||
/* Check the cached values. */
|
||||
if (!STRINGP (object))
|
||||
{
|
||||
if (NILP (object))
|
||||
b = current_buffer;
|
||||
else
|
||||
b = XBUFFER (object);
|
||||
if (b == cached_disp_buffer
|
||||
&& BUF_MODIFF (b) == cached_disp_modiff
|
||||
&& BUF_OVERLAY_MODIFF (b) == cached_disp_overlay_modiff)
|
||||
{
|
||||
if (cached_prev_pos >= 0
|
||||
&& cached_prev_pos < charpos && charpos <= cached_disp_pos)
|
||||
return cached_disp_pos;
|
||||
/* Handle overstepping either end of the known interval. */
|
||||
if (charpos > cached_disp_pos)
|
||||
cached_prev_pos = cached_disp_pos;
|
||||
else /* charpos <= cached_prev_pos */
|
||||
cached_prev_pos = max (charpos - 1, 0);
|
||||
}
|
||||
|
||||
/* Record new values in the cache. */
|
||||
if (b != cached_disp_buffer)
|
||||
{
|
||||
cached_disp_buffer = b;
|
||||
cached_prev_pos = max (charpos - 1, 0);
|
||||
}
|
||||
cached_disp_modiff = BUF_MODIFF (b);
|
||||
cached_disp_overlay_modiff = BUF_OVERLAY_MODIFF (b);
|
||||
}
|
||||
|
||||
/* If the character at CHARPOS is where the display string begins,
|
||||
return CHARPOS. */
|
||||
pos = make_number (charpos);
|
||||
|
@ -3179,7 +3219,11 @@ compute_display_string_pos (struct text_pos *position,
|
|||
spec))
|
||||
&& handle_display_spec (NULL, spec, object, Qnil, &tpos, bufpos,
|
||||
frame_window_p))
|
||||
return charpos;
|
||||
{
|
||||
if (!STRINGP (object))
|
||||
cached_disp_pos = charpos;
|
||||
return charpos;
|
||||
}
|
||||
|
||||
/* Look forward for the first character with a `display' property
|
||||
that will replace the underlying text when displayed. */
|
||||
|
@ -3199,6 +3243,8 @@ compute_display_string_pos (struct text_pos *position,
|
|||
|| !handle_display_spec (NULL, spec, object, Qnil, &tpos, bufpos,
|
||||
frame_window_p));
|
||||
|
||||
if (!STRINGP (object))
|
||||
cached_disp_pos = CHARPOS (tpos);
|
||||
return CHARPOS (tpos);
|
||||
}
|
||||
|
||||
|
@ -5731,17 +5777,19 @@ reseat (struct it *it, struct text_pos pos, int force_p)
|
|||
{
|
||||
/* For bidi iteration, we need to prime prev_stop and
|
||||
base_level_stop with our best estimations. */
|
||||
if (CHARPOS (pos) < it->prev_stop)
|
||||
{
|
||||
handle_stop_backwards (it, BEGV);
|
||||
if (CHARPOS (pos) < it->base_level_stop)
|
||||
it->base_level_stop = 0;
|
||||
}
|
||||
else if (CHARPOS (pos) > it->stop_charpos
|
||||
&& it->stop_charpos >= BEGV)
|
||||
handle_stop_backwards (it, it->stop_charpos);
|
||||
else /* force_p */
|
||||
handle_stop (it);
|
||||
/* Implementation note: Of course, POS is not necessarily a
|
||||
stop position, so assigning prev_pos to it is a lie; we
|
||||
should have called compute_stop_backwards. However, if
|
||||
the current buffer does not include any R2L characters,
|
||||
that call would be a waste of cycles, because the
|
||||
iterator will never move back, and thus never cross this
|
||||
"fake" stop position. So we delay that backward search
|
||||
until the time we really need it, in next_element_from_buffer. */
|
||||
if (CHARPOS (pos) != it->prev_stop)
|
||||
it->prev_stop = CHARPOS (pos);
|
||||
if (CHARPOS (pos) < it->base_level_stop)
|
||||
it->base_level_stop = 0; /* meaning it's unknown */
|
||||
handle_stop (it);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -7008,10 +7056,10 @@ next_element_from_string (struct it *it)
|
|||
embedding level, so test for that explicitly. */
|
||||
&& !BIDI_AT_BASE_LEVEL (it->bidi_it))
|
||||
{
|
||||
/* If we lost track of base_level_stop, we have no better place
|
||||
for handle_stop_backwards to start from than BEGV. This
|
||||
happens, e.g., when we were reseated to the previous
|
||||
screenful of text by vertical-motion. */
|
||||
/* If we lost track of base_level_stop, we have no better
|
||||
place for handle_stop_backwards to start from than string
|
||||
beginning. This happens, e.g., when we were reseated to
|
||||
the previous screenful of text by vertical-motion. */
|
||||
if (it->base_level_stop <= 0
|
||||
|| IT_STRING_CHARPOS (*it) < it->base_level_stop)
|
||||
it->base_level_stop = 0;
|
||||
|
@ -7199,6 +7247,50 @@ next_element_from_stretch (struct it *it)
|
|||
return 1;
|
||||
}
|
||||
|
||||
/* Scan backwards from IT's current position until we find a stop
|
||||
position, or until BEGV. This is called when we find ourself
|
||||
before both the last known prev_stop and base_level_stop while
|
||||
reordering bidirectional text. */
|
||||
|
||||
static void
|
||||
compute_stop_pos_backwards (struct it *it)
|
||||
{
|
||||
const int SCAN_BACK_LIMIT = 1000;
|
||||
struct text_pos pos;
|
||||
struct display_pos save_current = it->current;
|
||||
struct text_pos save_position = it->position;
|
||||
EMACS_INT charpos = IT_CHARPOS (*it);
|
||||
EMACS_INT where_we_are = charpos;
|
||||
EMACS_INT save_stop_pos = it->stop_charpos;
|
||||
EMACS_INT save_end_pos = it->end_charpos;
|
||||
|
||||
xassert (NILP (it->string) && !it->s);
|
||||
xassert (it->bidi_p);
|
||||
it->bidi_p = 0;
|
||||
do
|
||||
{
|
||||
it->end_charpos = min (charpos + 1, ZV);
|
||||
charpos = max (charpos - SCAN_BACK_LIMIT, BEGV);
|
||||
SET_TEXT_POS (pos, charpos, BYTE_TO_CHAR (charpos));
|
||||
reseat_1 (it, pos, 0);
|
||||
compute_stop_pos (it);
|
||||
/* We must advance forward, right? */
|
||||
if (it->stop_charpos <= charpos)
|
||||
abort ();
|
||||
}
|
||||
while (charpos > BEGV && it->stop_charpos >= it->end_charpos);
|
||||
|
||||
if (it->stop_charpos <= where_we_are)
|
||||
it->prev_stop = it->stop_charpos;
|
||||
else
|
||||
it->prev_stop = BEGV;
|
||||
it->bidi_p = 1;
|
||||
it->current = save_current;
|
||||
it->position = save_position;
|
||||
it->stop_charpos = save_stop_pos;
|
||||
it->end_charpos = save_end_pos;
|
||||
}
|
||||
|
||||
/* Scan forward from CHARPOS in the current buffer/string, until we
|
||||
find a stop position > current IT's position. Then handle the stop
|
||||
position before that. This is called when we bump into a stop
|
||||
|
@ -7218,6 +7310,7 @@ handle_stop_backwards (struct it *it, EMACS_INT charpos)
|
|||
EMACS_INT next_stop;
|
||||
|
||||
/* Scan in strict logical order. */
|
||||
xassert (it->bidi_p);
|
||||
it->bidi_p = 0;
|
||||
do
|
||||
{
|
||||
|
@ -7237,11 +7330,11 @@ handle_stop_backwards (struct it *it, EMACS_INT charpos)
|
|||
}
|
||||
while (charpos <= where_we_are);
|
||||
|
||||
next_stop = it->stop_charpos;
|
||||
it->stop_charpos = it->prev_stop;
|
||||
it->bidi_p = 1;
|
||||
it->current = save_current;
|
||||
it->position = save_position;
|
||||
next_stop = it->stop_charpos;
|
||||
it->stop_charpos = it->prev_stop;
|
||||
handle_stop (it);
|
||||
it->stop_charpos = next_stop;
|
||||
}
|
||||
|
@ -7338,14 +7431,19 @@ next_element_from_buffer (struct it *it)
|
|||
embedding level, so test for that explicitly. */
|
||||
&& !BIDI_AT_BASE_LEVEL (it->bidi_it))
|
||||
{
|
||||
/* If we lost track of base_level_stop, we have no better place
|
||||
for handle_stop_backwards to start from than BEGV. This
|
||||
happens, e.g., when we were reseated to the previous
|
||||
screenful of text by vertical-motion. */
|
||||
if (it->base_level_stop <= 0
|
||||
|| IT_CHARPOS (*it) < it->base_level_stop)
|
||||
it->base_level_stop = BEGV;
|
||||
handle_stop_backwards (it, it->base_level_stop);
|
||||
{
|
||||
/* If we lost track of base_level_stop, we need to find
|
||||
prev_stop by looking backwards. This happens, e.g., when
|
||||
we were reseated to the previous screenful of text by
|
||||
vertical-motion. */
|
||||
it->base_level_stop = BEGV;
|
||||
compute_stop_pos_backwards (it);
|
||||
handle_stop_backwards (it, it->prev_stop);
|
||||
}
|
||||
else
|
||||
handle_stop_backwards (it, it->base_level_stop);
|
||||
return GET_NEXT_DISPLAY_ELEMENT (it);
|
||||
}
|
||||
else
|
||||
|
@ -7547,8 +7645,9 @@ move_it_in_display_line_to (struct it *it,
|
|||
{
|
||||
enum move_it_result result = MOVE_UNDEFINED;
|
||||
struct glyph_row *saved_glyph_row;
|
||||
struct it wrap_it, atpos_it, atx_it;
|
||||
struct it wrap_it, atpos_it, atx_it, ppos_it;
|
||||
void *wrap_data = NULL, *atpos_data = NULL, *atx_data = NULL;
|
||||
void *ppos_data = NULL;
|
||||
int may_wrap = 0;
|
||||
enum it_method prev_method = it->method;
|
||||
EMACS_INT prev_pos = IT_CHARPOS (*it);
|
||||
|
@ -7567,6 +7666,19 @@ move_it_in_display_line_to (struct it *it,
|
|||
atpos_it.sp = -1;
|
||||
atx_it.sp = -1;
|
||||
|
||||
/* Use ppos_it under bidi reordering to save a copy of IT for the
|
||||
position > CHARPOS that is the closest to CHARPOS. We restore
|
||||
that position in IT when we have scanned the entire display line
|
||||
without finding a match for CHARPOS and all the character
|
||||
positions are greater than CHARPOS. */
|
||||
if (it->bidi_p)
|
||||
{
|
||||
SAVE_IT (ppos_it, *it, ppos_data);
|
||||
SET_TEXT_POS (ppos_it.current.pos, ZV, ZV_BYTE);
|
||||
if ((op & MOVE_TO_POS) && IT_CHARPOS (*it) >= to_charpos)
|
||||
SAVE_IT (ppos_it, *it, ppos_data);
|
||||
}
|
||||
|
||||
#define BUFFER_POS_REACHED_P() \
|
||||
((op & MOVE_TO_POS) != 0 \
|
||||
&& BUFFERP (it->object) \
|
||||
|
@ -7692,6 +7804,11 @@ move_it_in_display_line_to (struct it *it,
|
|||
if (IT_CHARPOS (*it) < CHARPOS (this_line_min_pos))
|
||||
SET_TEXT_POS (this_line_min_pos,
|
||||
IT_CHARPOS (*it), IT_BYTEPOS (*it));
|
||||
if (it->bidi_p
|
||||
&& (op & MOVE_TO_POS)
|
||||
&& IT_CHARPOS (*it) > to_charpos
|
||||
&& IT_CHARPOS (*it) < IT_CHARPOS (ppos_it))
|
||||
SAVE_IT (ppos_it, *it, ppos_data);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -7902,7 +8019,11 @@ move_it_in_display_line_to (struct it *it,
|
|||
if ((op & MOVE_TO_POS) != 0
|
||||
&& !saw_smaller_pos
|
||||
&& IT_CHARPOS (*it) > to_charpos)
|
||||
result = MOVE_POS_MATCH_OR_ZV;
|
||||
{
|
||||
result = MOVE_POS_MATCH_OR_ZV;
|
||||
if (it->bidi_p && IT_CHARPOS (ppos_it) < ZV)
|
||||
RESTORE_IT (it, &ppos_it, ppos_data);
|
||||
}
|
||||
else
|
||||
result = MOVE_NEWLINE_OR_CR;
|
||||
break;
|
||||
|
@ -7918,6 +8039,11 @@ move_it_in_display_line_to (struct it *it,
|
|||
SET_TEXT_POS (this_line_min_pos, IT_CHARPOS (*it), IT_BYTEPOS (*it));
|
||||
if (IT_CHARPOS (*it) < to_charpos)
|
||||
saw_smaller_pos = 1;
|
||||
if (it->bidi_p
|
||||
&& (op & MOVE_TO_POS)
|
||||
&& IT_CHARPOS (*it) >= to_charpos
|
||||
&& IT_CHARPOS (*it) < IT_CHARPOS (ppos_it))
|
||||
SAVE_IT (ppos_it, *it, ppos_data);
|
||||
|
||||
/* Stop if lines are truncated and IT's current x-position is
|
||||
past the right edge of the window now. */
|
||||
|
@ -7927,7 +8053,9 @@ move_it_in_display_line_to (struct it *it,
|
|||
if (!FRAME_WINDOW_P (it->f)
|
||||
|| IT_OVERFLOW_NEWLINE_INTO_FRINGE (it))
|
||||
{
|
||||
if (!get_next_display_element (it)
|
||||
int at_eob_p = 0;
|
||||
|
||||
if ((at_eob_p = !get_next_display_element (it))
|
||||
|| BUFFER_POS_REACHED_P ()
|
||||
/* If we are past TO_CHARPOS, but never saw any
|
||||
character positions smaller than TO_CHARPOS,
|
||||
|
@ -7938,6 +8066,8 @@ move_it_in_display_line_to (struct it *it,
|
|||
&& IT_CHARPOS (*it) > to_charpos))
|
||||
{
|
||||
result = MOVE_POS_MATCH_OR_ZV;
|
||||
if (it->bidi_p && !at_eob_p && IT_CHARPOS (ppos_it) < ZV)
|
||||
RESTORE_IT (it, &ppos_it, ppos_data);
|
||||
break;
|
||||
}
|
||||
if (ITERATOR_AT_END_OF_LINE_P (it))
|
||||
|
@ -7951,6 +8081,8 @@ move_it_in_display_line_to (struct it *it,
|
|||
&& IT_CHARPOS (*it) > to_charpos)
|
||||
{
|
||||
result = MOVE_POS_MATCH_OR_ZV;
|
||||
if (it->bidi_p && IT_CHARPOS (ppos_it) < ZV)
|
||||
RESTORE_IT (it, &ppos_it, ppos_data);
|
||||
break;
|
||||
}
|
||||
result = MOVE_LINE_TRUNCATED;
|
||||
|
@ -7976,6 +8108,8 @@ move_it_in_display_line_to (struct it *it,
|
|||
xfree (atx_data);
|
||||
if (wrap_data)
|
||||
xfree (wrap_data);
|
||||
if (ppos_data)
|
||||
xfree (ppos_data);
|
||||
|
||||
/* Restore the iterator settings altered at the beginning of this
|
||||
function. */
|
||||
|
@ -23126,7 +23260,7 @@ produce_glyphless_glyph (struct it *it, int for_no_font, Lisp_Object acronym)
|
|||
base_width = font->average_width;
|
||||
|
||||
/* Get a face ID for the glyph by utilizing a cache (the same way as
|
||||
doen for `escape-glyph' in get_next_display_element). */
|
||||
done for `escape-glyph' in get_next_display_element). */
|
||||
if (it->f == last_glyphless_glyph_frame
|
||||
&& it->face_id == last_glyphless_glyph_face_id)
|
||||
{
|
||||
|
@ -25029,7 +25163,7 @@ rows_from_pos_range (struct window *w,
|
|||
|
||||
while (g < e)
|
||||
{
|
||||
if (BUFFERP (g->object)
|
||||
if ((BUFFERP (g->object) || INTEGERP (g->object))
|
||||
&& start_charpos <= g->charpos && g->charpos < end_charpos)
|
||||
*start = row;
|
||||
g++;
|
||||
|
@ -25079,7 +25213,7 @@ rows_from_pos_range (struct window *w,
|
|||
|
||||
while (g < e)
|
||||
{
|
||||
if (BUFFERP (g->object)
|
||||
if ((BUFFERP (g->object) || INTEGERP (g->object))
|
||||
&& start_charpos <= g->charpos && g->charpos < end_charpos)
|
||||
break;
|
||||
g++;
|
||||
|
|
|
@ -1920,7 +1920,8 @@ check_lface_attrs (Lisp_Object *attrs)
|
|||
|| IGNORE_DEFFACE_P (attrs[LFACE_FONT_INDEX])
|
||||
|| FONTP (attrs[LFACE_FONT_INDEX]));
|
||||
xassert (UNSPECIFIEDP (attrs[LFACE_FONTSET_INDEX])
|
||||
|| STRINGP (attrs[LFACE_FONTSET_INDEX]));
|
||||
|| STRINGP (attrs[LFACE_FONTSET_INDEX])
|
||||
|| NILP (attrs[LFACE_FONTSET_INDEX]));
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
@ -2933,7 +2933,7 @@ unwind_create_frame (Lisp_Object frame)
|
|||
#if GLYPH_DEBUG
|
||||
/* Check that reference counts are indeed correct. */
|
||||
xassert (dpyinfo->reference_count == dpyinfo_refcount);
|
||||
xassert (dpyinfo->image_cache->refcount == image_cache_refcount);
|
||||
xassert (dpyinfo->terminal->image_cache->refcount == image_cache_refcount);
|
||||
#endif
|
||||
return Qt;
|
||||
}
|
||||
|
|
28
src/xml.c
28
src/xml.c
|
@ -71,6 +71,14 @@ make_dom (xmlNode *node)
|
|||
else
|
||||
return Qnil;
|
||||
}
|
||||
else if (node->type == XML_COMMENT_NODE)
|
||||
{
|
||||
if (node->content)
|
||||
return list3 (intern ("comment"), Qnil,
|
||||
build_string ((char *) node->content));
|
||||
else
|
||||
return Qnil;
|
||||
}
|
||||
else
|
||||
return Qnil;
|
||||
}
|
||||
|
@ -79,7 +87,6 @@ static Lisp_Object
|
|||
parse_region (Lisp_Object start, Lisp_Object end, Lisp_Object base_url, int htmlp)
|
||||
{
|
||||
xmlDoc *doc;
|
||||
xmlNode *node;
|
||||
Lisp_Object result = Qnil;
|
||||
const char *burl = "";
|
||||
EMACS_INT bytes;
|
||||
|
@ -117,9 +124,22 @@ parse_region (Lisp_Object start, Lisp_Object end, Lisp_Object base_url, int html
|
|||
|
||||
if (doc != NULL)
|
||||
{
|
||||
node = xmlDocGetRootElement (doc);
|
||||
if (node != NULL)
|
||||
result = make_dom (node);
|
||||
xmlNode *n = doc->children->next;
|
||||
Lisp_Object r = Qnil;
|
||||
|
||||
while (n) {
|
||||
if (!NILP (r))
|
||||
result = Fcons (r, result);
|
||||
r = make_dom (n);
|
||||
n = n->next;
|
||||
}
|
||||
|
||||
if (NILP (result))
|
||||
result = r;
|
||||
else
|
||||
result = Fcons (intern ("top"),
|
||||
Fcons (Qnil, Fnreverse (Fcons (r, result))));
|
||||
|
||||
xmlFreeDoc (doc);
|
||||
xmlCleanupParser ();
|
||||
}
|
||||
|
|
|
@ -1,3 +1,25 @@
|
|||
2011-07-26 Ulf Jasper <ulf.jasper@web.de>
|
||||
|
||||
* automated/icalendar-tests.el (icalendar-tests--compare-strings):
|
||||
Removed, simply use string=.
|
||||
(icalendar--diarytime-to-isotime)
|
||||
(icalendar--datetime-to-diary-date)
|
||||
(icalendar--datestring-to-isodate)
|
||||
(icalendar--format-ical-event)
|
||||
(icalendar--parse-summary-and-rest)
|
||||
(icalendar-tests--do-test-import)
|
||||
(icalendar-tests--do-test-cycle) : Changed argument order of
|
||||
string= to EXPECTED ACTUAL.
|
||||
(icalendar--import-format-sample)
|
||||
(icalendar--format-ical-event)
|
||||
(icalendar-import-non-recurring)
|
||||
(icalendar-import-rrule)
|
||||
(icalendar-import-duration)
|
||||
(icalendar-import-bug-6766)
|
||||
(icalendar-real-world): Adjusted to string= instead of
|
||||
icalendar-tests--compare-strings.
|
||||
(icalendar-import-multiple-vcalendars): New.
|
||||
|
||||
2011-05-11 Teodor Zlatanov <tzz@lifelogs.com>
|
||||
|
||||
* automated/gnus-tests.el: Add wrapper for Gnus tests.
|
||||
|
|
|
@ -51,35 +51,6 @@
|
|||
(replace-regexp-in-string "[ \t\n]+\\'" ""
|
||||
(replace-regexp-in-string "\\`[ \t\n]+" "" string)))
|
||||
|
||||
(defun icalendar-tests--compare-strings (str1 str2)
|
||||
"Compare strings STR1 and STR2.
|
||||
Return t if strings are equal, else return substring indicating first difference.
|
||||
FIXME: make this a little smarter."
|
||||
(let* ((s1 (icalendar-tests--trim str1))
|
||||
(s2 (icalendar-tests--trim str2))
|
||||
(result (compare-strings s1 0 nil s2 0 nil))
|
||||
(len (length str2)))
|
||||
(if (numberp result)
|
||||
(if (> result 0)
|
||||
(concat "..." (substring str2 (- result 1)
|
||||
(min len (+ (- result 1) 3))) "...")
|
||||
(concat "..." (substring str2 (- (+ result 1))
|
||||
(min len (+ (- (+ result 1)) 3))) "..."))
|
||||
t)))
|
||||
|
||||
(ert-deftest icalendar-tests--compare-strings ()
|
||||
"Test icalendar-tests--compare-strings."
|
||||
(should (equal t (icalendar-tests--compare-strings " abcde" "abcde ")))
|
||||
(should
|
||||
(string= "...def..."
|
||||
(icalendar-tests--compare-strings "abcxe" "abcdefghijklmn")))
|
||||
(should (string= "...xe..."
|
||||
(icalendar-tests--compare-strings "abcde" "abcxe")))
|
||||
(should (string= "...ddd..."
|
||||
(icalendar-tests--compare-strings "abc" "abcdddddd")))
|
||||
(should (string= "......"
|
||||
(icalendar-tests--compare-strings "abcdefghij" "abc"))))
|
||||
|
||||
;; ======================================================================
|
||||
;; Tests of functions
|
||||
;; ======================================================================
|
||||
|
@ -269,85 +240,85 @@ END:VTIMEZONE
|
|||
|
||||
(ert-deftest icalendar--diarytime-to-isotime ()
|
||||
"Test method for `icalendar--diarytime-to-isotime'."
|
||||
(should (string= (icalendar--diarytime-to-isotime "01:15" "")
|
||||
"T011500"))
|
||||
(should (string= (icalendar--diarytime-to-isotime "1:15" "")
|
||||
"T011500"))
|
||||
(should (string= (icalendar--diarytime-to-isotime "0:01" "")
|
||||
"T000100"))
|
||||
(should (string= (icalendar--diarytime-to-isotime "0100" "")
|
||||
"T010000"))
|
||||
(should (string= (icalendar--diarytime-to-isotime "0100" "am")
|
||||
"T010000"))
|
||||
(should (string= (icalendar--diarytime-to-isotime "0100" "pm")
|
||||
"T130000"))
|
||||
(should (string= (icalendar--diarytime-to-isotime "1200" "")
|
||||
"T120000"))
|
||||
(should (string= (icalendar--diarytime-to-isotime "17:17" "")
|
||||
"T171700"))
|
||||
(should (string= (icalendar--diarytime-to-isotime "1200" "am")
|
||||
"T000000"))
|
||||
(should (string= (icalendar--diarytime-to-isotime "1201" "am")
|
||||
"T000100"))
|
||||
(should (string= (icalendar--diarytime-to-isotime "1259" "am")
|
||||
"T005900"))
|
||||
(should (string= (icalendar--diarytime-to-isotime "1200" "pm")
|
||||
"T120000"))
|
||||
(should (string= (icalendar--diarytime-to-isotime "1201" "pm")
|
||||
"T120100"))
|
||||
(should (string= (icalendar--diarytime-to-isotime "1259" "pm")
|
||||
"T125900")))
|
||||
(should (string= "T011500"
|
||||
(icalendar--diarytime-to-isotime "01:15" "")))
|
||||
(should (string= "T011500"
|
||||
(icalendar--diarytime-to-isotime "1:15" "")))
|
||||
(should (string= "T000100"
|
||||
(icalendar--diarytime-to-isotime "0:01" "")))
|
||||
(should (string= "T010000"
|
||||
(icalendar--diarytime-to-isotime "0100" "")))
|
||||
(should (string= "T010000"
|
||||
(icalendar--diarytime-to-isotime "0100" "am")))
|
||||
(should (string= "T130000"
|
||||
(icalendar--diarytime-to-isotime "0100" "pm")))
|
||||
(should (string= "T120000"
|
||||
(icalendar--diarytime-to-isotime "1200" "")))
|
||||
(should (string= "T171700"
|
||||
(icalendar--diarytime-to-isotime "17:17" "")))
|
||||
(should (string= "T000000"
|
||||
(icalendar--diarytime-to-isotime "1200" "am")))
|
||||
(should (string= "T000100"
|
||||
(icalendar--diarytime-to-isotime "1201" "am")))
|
||||
(should (string= "T005900"
|
||||
(icalendar--diarytime-to-isotime "1259" "am")))
|
||||
(should (string= "T120000"
|
||||
(icalendar--diarytime-to-isotime "1200" "pm")))
|
||||
(should (string= "T120100"
|
||||
(icalendar--diarytime-to-isotime "1201" "pm")))
|
||||
(should (string= "T125900"
|
||||
(icalendar--diarytime-to-isotime "1259" "pm"))))
|
||||
|
||||
(ert-deftest icalendar--datetime-to-diary-date ()
|
||||
"Test method for `icalendar--datetime-to-diary-date'."
|
||||
(let* ((datetime '(59 59 23 31 12 2008))
|
||||
(calendar-date-style 'iso))
|
||||
(should (string= (icalendar--datetime-to-diary-date datetime)
|
||||
"2008 12 31"))
|
||||
(should (string= "2008 12 31"
|
||||
(icalendar--datetime-to-diary-date datetime)))
|
||||
(setq calendar-date-style 'european)
|
||||
(should (string= (icalendar--datetime-to-diary-date datetime)
|
||||
"31 12 2008"))
|
||||
(should (string= "31 12 2008"
|
||||
(icalendar--datetime-to-diary-date datetime)))
|
||||
(setq calendar-date-style 'american)
|
||||
(should (string= (icalendar--datetime-to-diary-date datetime)
|
||||
"12 31 2008"))))
|
||||
(should (string= "12 31 2008"
|
||||
(icalendar--datetime-to-diary-date datetime)))))
|
||||
|
||||
(ert-deftest icalendar--datestring-to-isodate ()
|
||||
"Test method for `icalendar--datestring-to-isodate'."
|
||||
(let ((calendar-date-style 'iso))
|
||||
;; numeric iso
|
||||
(should (string= (icalendar--datestring-to-isodate "2008 05 11")
|
||||
"20080511"))
|
||||
(should (string= (icalendar--datestring-to-isodate "2008 05 31")
|
||||
"20080531"))
|
||||
(should (string= (icalendar--datestring-to-isodate "2008 05 31" 2)
|
||||
"20080602"))
|
||||
(should (string= "20080511"
|
||||
(icalendar--datestring-to-isodate "2008 05 11")))
|
||||
(should (string= "20080531"
|
||||
(icalendar--datestring-to-isodate "2008 05 31")))
|
||||
(should (string= "20080602"
|
||||
(icalendar--datestring-to-isodate "2008 05 31" 2)))
|
||||
|
||||
;; numeric european
|
||||
(setq calendar-date-style 'european)
|
||||
(should (string= (icalendar--datestring-to-isodate "11 05 2008")
|
||||
"20080511"))
|
||||
(should (string= (icalendar--datestring-to-isodate "31 05 2008")
|
||||
"20080531"))
|
||||
(should (string= (icalendar--datestring-to-isodate "31 05 2008" 2)
|
||||
"20080602"))
|
||||
(should (string= "20080511"
|
||||
(icalendar--datestring-to-isodate "11 05 2008")))
|
||||
(should (string= "20080531"
|
||||
(icalendar--datestring-to-isodate "31 05 2008")))
|
||||
(should (string= "20080602"
|
||||
(icalendar--datestring-to-isodate "31 05 2008" 2)))
|
||||
|
||||
;; numeric american
|
||||
(setq calendar-date-style 'american)
|
||||
(should (string= (icalendar--datestring-to-isodate "11 05 2008")
|
||||
"20081105"))
|
||||
(should (string= (icalendar--datestring-to-isodate "12 30 2008")
|
||||
"20081230"))
|
||||
(should (string= (icalendar--datestring-to-isodate "12 30 2008" 2)
|
||||
"20090101"))
|
||||
(should (string= "20081105"
|
||||
(icalendar--datestring-to-isodate "11 05 2008")))
|
||||
(should (string= "20081230"
|
||||
(icalendar--datestring-to-isodate "12 30 2008")))
|
||||
(should (string= "20090101"
|
||||
(icalendar--datestring-to-isodate "12 30 2008" 2)))
|
||||
|
||||
;; non-numeric
|
||||
(setq calendar-date-style nil) ;not necessary for conversion
|
||||
(should (string= (icalendar--datestring-to-isodate "Nov 05 2008")
|
||||
"20081105"))
|
||||
(should (string= (icalendar--datestring-to-isodate "05 Nov 2008")
|
||||
"20081105"))
|
||||
(should (string= (icalendar--datestring-to-isodate "2008 Nov 05")
|
||||
"20081105"))))
|
||||
(should (string= "20081105"
|
||||
(icalendar--datestring-to-isodate "Nov 05 2008")))
|
||||
(should (string= "20081105"
|
||||
(icalendar--datestring-to-isodate "05 Nov 2008")))
|
||||
(should (string= "20081105"
|
||||
(icalendar--datestring-to-isodate "2008 Nov 05")))))
|
||||
|
||||
(ert-deftest icalendar--first-weekday-of-year ()
|
||||
"Test method for `icalendar-first-weekday-of-year'."
|
||||
|
@ -363,7 +334,9 @@ END:VTIMEZONE
|
|||
|
||||
(ert-deftest icalendar--import-format-sample ()
|
||||
"Test method for `icalendar-import-format-sample'."
|
||||
(should (string= (icalendar-import-format-sample
|
||||
(should (string= (concat "SUMMARY=`a' DESCRIPTION=`b' LOCATION=`c' "
|
||||
"ORGANIZER=`d' STATUS=`' URL=`' CLASS=`'")
|
||||
(icalendar-import-format-sample
|
||||
(icalendar-tests--get-ical-event "BEGIN:VEVENT
|
||||
DTSTAMP:20030509T043439Z
|
||||
DTSTART:20030509T103000
|
||||
|
@ -373,9 +346,7 @@ LOCATION:c
|
|||
DTEND:20030509T153000
|
||||
DESCRIPTION:b
|
||||
END:VEVENT
|
||||
"))
|
||||
(concat "SUMMARY=`a' DESCRIPTION=`b' LOCATION=`c' "
|
||||
"ORGANIZER=`d' STATUS=`' URL=`' CLASS=`'"))))
|
||||
")))))
|
||||
|
||||
(ert-deftest icalendar--format-ical-event ()
|
||||
"Test `icalendar--format-ical-event'."
|
||||
|
@ -397,12 +368,11 @@ DTEND:20030509T153000
|
|||
DESCRIPTION:des
|
||||
END:VEVENT
|
||||
")))
|
||||
(should (string= (icalendar--format-ical-event event)
|
||||
"SUM sum DES des LOC loc ORG org"))
|
||||
(should (string= "SUM sum DES des LOC loc ORG org"
|
||||
(icalendar--format-ical-event event)))
|
||||
(setq icalendar-import-format (lambda (&rest ignore)
|
||||
"helloworld"))
|
||||
(should (string= (icalendar--format-ical-event event)
|
||||
"helloworld"))
|
||||
(should (string= "helloworld" (icalendar--format-ical-event event)))
|
||||
(setq icalendar-import-format
|
||||
(lambda (e)
|
||||
(format "-%s-%s-%s-%s-%s-%s-%s-"
|
||||
|
@ -413,8 +383,8 @@ END:VEVENT
|
|||
(icalendar--get-event-property event 'STATUS)
|
||||
(icalendar--get-event-property event 'URL)
|
||||
(icalendar--get-event-property event 'CLASS))))
|
||||
(should (string= (icalendar--format-ical-event event)
|
||||
"-sum-des-loc-org-nil-nil-nil-"))))
|
||||
(should (string= "-sum-des-loc-org-nil-nil-nil-"
|
||||
(icalendar--format-ical-event event)))))
|
||||
|
||||
(ert-deftest icalendar--parse-summary-and-rest ()
|
||||
"Test `icalendar--parse-summary-and-rest'."
|
||||
|
@ -428,15 +398,15 @@ END:VEVENT
|
|||
(icalendar-import-format-class " CLA %s")
|
||||
(result))
|
||||
(setq result (icalendar--parse-summary-and-rest "SUM sum ORG org"))
|
||||
(should (string= (cdr (assoc 'org result)) "org"))
|
||||
(should (string= "org" (cdr (assoc 'org result))))
|
||||
|
||||
(setq result (icalendar--parse-summary-and-rest
|
||||
"SUM sum DES des LOC loc ORG org STA sta URL url CLA cla"))
|
||||
(should (string= (cdr (assoc 'des result)) "des"))
|
||||
(should (string= (cdr (assoc 'loc result)) "loc"))
|
||||
(should (string= (cdr (assoc 'org result)) "org"))
|
||||
(should (string= (cdr (assoc 'sta result)) "sta"))
|
||||
(should (string= (cdr (assoc 'cla result)) "cla"))
|
||||
(should (string= "des" (cdr (assoc 'des result))))
|
||||
(should (string= "loc" (cdr (assoc 'loc result))))
|
||||
(should (string= "org" (cdr (assoc 'org result))))
|
||||
(should (string= "sta" (cdr (assoc 'sta result))))
|
||||
(should (string= "cla" (cdr (assoc 'cla result))))
|
||||
|
||||
(setq icalendar-import-format (lambda () "Hello world"))
|
||||
(setq result (icalendar--parse-summary-and-rest
|
||||
|
@ -738,12 +708,10 @@ Argument INPUT input icalendar string.
|
|||
Argument EXPECTED-OUTPUT expected diary string."
|
||||
(let ((temp-file (make-temp-file "icalendar-test-diary")))
|
||||
(icalendar-import-buffer temp-file t t)
|
||||
(unwind-protect
|
||||
(save-excursion
|
||||
(find-file temp-file)
|
||||
(let ((result (buffer-substring-no-properties (point-min) (point-max))))
|
||||
(should (icalendar-tests--compare-strings result
|
||||
expected-output))))
|
||||
(save-excursion
|
||||
(find-file temp-file)
|
||||
(let ((result (buffer-substring-no-properties (point-min) (point-max))))
|
||||
(should (string= expected-output result)))
|
||||
(kill-buffer (find-buffer-visiting temp-file))
|
||||
(delete-file temp-file))))
|
||||
|
||||
|
@ -753,23 +721,23 @@ Argument EXPECTED-OUTPUT expected diary string."
|
|||
"SUMMARY:non-recurring
|
||||
DTSTART;VALUE=DATE-TIME:20030919T090000
|
||||
DTEND;VALUE=DATE-TIME:20030919T113000"
|
||||
"&2003/9/19 09:00-11:30 non-recurring"
|
||||
"&19/9/2003 09:00-11:30 non-recurring"
|
||||
"&9/19/2003 09:00-11:30 non-recurring")
|
||||
"&2003/9/19 09:00-11:30 non-recurring\n"
|
||||
"&19/9/2003 09:00-11:30 non-recurring\n"
|
||||
"&9/19/2003 09:00-11:30 non-recurring\n")
|
||||
(icalendar-tests--test-import
|
||||
"SUMMARY:non-recurring allday
|
||||
DTSTART;VALUE=DATE-TIME:20030919"
|
||||
"&2003/9/19 non-recurring allday"
|
||||
"&19/9/2003 non-recurring allday"
|
||||
"&9/19/2003 non-recurring allday")
|
||||
"&2003/9/19 non-recurring allday\n"
|
||||
"&19/9/2003 non-recurring allday\n"
|
||||
"&9/19/2003 non-recurring allday\n")
|
||||
(icalendar-tests--test-import
|
||||
;; do not remove the trailing blank after "long"!
|
||||
"SUMMARY:long
|
||||
"SUMMARY:long
|
||||
summary
|
||||
DTSTART;VALUE=DATE:20030919"
|
||||
"&2003/9/19 long summary"
|
||||
"&19/9/2003 long summary"
|
||||
"&9/19/2003 long summary")
|
||||
"&2003/9/19 long summary\n"
|
||||
"&19/9/2003 long summary\n"
|
||||
"&9/19/2003 long summary\n")
|
||||
(icalendar-tests--test-import
|
||||
"UID:748f2da0-0d9b-11d8-97af-b4ec8686ea61
|
||||
SUMMARY:Sommerferien
|
||||
|
@ -791,7 +759,8 @@ DTSTAMP:20031103T011641Z
|
|||
"
|
||||
"&%%(and (diary-block 7 19 2004 8 27 2004)) Sommerferien
|
||||
Status: TENTATIVE
|
||||
Class: PRIVATE")
|
||||
Class: PRIVATE
|
||||
")
|
||||
(icalendar-tests--test-import
|
||||
"UID
|
||||
:04979712-3902-11d9-93dd-8f9f4afe08da
|
||||
|
@ -814,13 +783,13 @@ LAST-MODIFIED
|
|||
"
|
||||
"&2004/11/23 14:00-14:30 folded summary
|
||||
Status: TENTATIVE
|
||||
Class: PRIVATE"
|
||||
Class: PRIVATE\n"
|
||||
"&23/11/2004 14:00-14:30 folded summary
|
||||
Status: TENTATIVE
|
||||
Class: PRIVATE"
|
||||
Class: PRIVATE\n"
|
||||
"&11/23/2004 14:00-14:30 folded summary
|
||||
Status: TENTATIVE
|
||||
Class: PRIVATE")
|
||||
Class: PRIVATE\n")
|
||||
|
||||
(icalendar-tests--test-import
|
||||
"UID
|
||||
|
@ -842,13 +811,13 @@ DTSTAMP
|
|||
"
|
||||
"&2004/11/23 14:45-15:45 another example
|
||||
Status: TENTATIVE
|
||||
Class: PRIVATE"
|
||||
Class: PRIVATE\n"
|
||||
"&23/11/2004 14:45-15:45 another example
|
||||
Status: TENTATIVE
|
||||
Class: PRIVATE"
|
||||
Class: PRIVATE\n"
|
||||
"&11/23/2004 14:45-15:45 another example
|
||||
Status: TENTATIVE
|
||||
Class: PRIVATE"))
|
||||
Class: PRIVATE\n"))
|
||||
|
||||
(ert-deftest icalendar-import-rrule ()
|
||||
(icalendar-tests--test-import
|
||||
|
@ -857,9 +826,9 @@ DTSTART;VALUE=DATE-TIME:20030919T090000
|
|||
DTEND;VALUE=DATE-TIME:20030919T113000
|
||||
RRULE:FREQ=DAILY;
|
||||
"
|
||||
"&%%(and (diary-cyclic 1 2003 9 19)) 09:00-11:30 rrule daily"
|
||||
"&%%(and (diary-cyclic 1 19 9 2003)) 09:00-11:30 rrule daily"
|
||||
"&%%(and (diary-cyclic 1 9 19 2003)) 09:00-11:30 rrule daily")
|
||||
"&%%(and (diary-cyclic 1 2003 9 19)) 09:00-11:30 rrule daily\n"
|
||||
"&%%(and (diary-cyclic 1 19 9 2003)) 09:00-11:30 rrule daily\n"
|
||||
"&%%(and (diary-cyclic 1 9 19 2003)) 09:00-11:30 rrule daily\n")
|
||||
;; RRULE examples
|
||||
(icalendar-tests--test-import
|
||||
"SUMMARY:rrule daily
|
||||
|
@ -867,9 +836,9 @@ DTSTART;VALUE=DATE-TIME:20030919T090000
|
|||
DTEND;VALUE=DATE-TIME:20030919T113000
|
||||
RRULE:FREQ=DAILY;INTERVAL=2
|
||||
"
|
||||
"&%%(and (diary-cyclic 2 2003 9 19)) 09:00-11:30 rrule daily"
|
||||
"&%%(and (diary-cyclic 2 19 9 2003)) 09:00-11:30 rrule daily"
|
||||
"&%%(and (diary-cyclic 2 9 19 2003)) 09:00-11:30 rrule daily")
|
||||
"&%%(and (diary-cyclic 2 2003 9 19)) 09:00-11:30 rrule daily\n"
|
||||
"&%%(and (diary-cyclic 2 19 9 2003)) 09:00-11:30 rrule daily\n"
|
||||
"&%%(and (diary-cyclic 2 9 19 2003)) 09:00-11:30 rrule daily\n")
|
||||
(icalendar-tests--test-import
|
||||
"SUMMARY:rrule daily with exceptions
|
||||
DTSTART;VALUE=DATE-TIME:20030919T090000
|
||||
|
@ -877,36 +846,36 @@ DTEND;VALUE=DATE-TIME:20030919T113000
|
|||
RRULE:FREQ=DAILY;INTERVAL=2
|
||||
EXDATE:20030921,20030925
|
||||
"
|
||||
"&%%(and (not (diary-date 2003 9 25)) (not (diary-date 2003 9 21)) (diary-cyclic 2 2003 9 19)) 09:00-11:30 rrule daily with exceptions"
|
||||
"&%%(and (not (diary-date 25 9 2003)) (not (diary-date 21 9 2003)) (diary-cyclic 2 19 9 2003)) 09:00-11:30 rrule daily with exceptions"
|
||||
"&%%(and (not (diary-date 9 25 2003)) (not (diary-date 9 21 2003)) (diary-cyclic 2 9 19 2003)) 09:00-11:30 rrule daily with exceptions")
|
||||
"&%%(and (not (diary-date 2003 9 25)) (not (diary-date 2003 9 21)) (diary-cyclic 2 2003 9 19)) 09:00-11:30 rrule daily with exceptions\n"
|
||||
"&%%(and (not (diary-date 25 9 2003)) (not (diary-date 21 9 2003)) (diary-cyclic 2 19 9 2003)) 09:00-11:30 rrule daily with exceptions\n"
|
||||
"&%%(and (not (diary-date 9 25 2003)) (not (diary-date 9 21 2003)) (diary-cyclic 2 9 19 2003)) 09:00-11:30 rrule daily with exceptions\n")
|
||||
(icalendar-tests--test-import
|
||||
"SUMMARY:rrule weekly
|
||||
DTSTART;VALUE=DATE-TIME:20030919T090000
|
||||
DTEND;VALUE=DATE-TIME:20030919T113000
|
||||
RRULE:FREQ=WEEKLY;
|
||||
"
|
||||
"&%%(and (diary-cyclic 7 2003 9 19)) 09:00-11:30 rrule weekly"
|
||||
"&%%(and (diary-cyclic 7 19 9 2003)) 09:00-11:30 rrule weekly"
|
||||
"&%%(and (diary-cyclic 7 9 19 2003)) 09:00-11:30 rrule weekly")
|
||||
"&%%(and (diary-cyclic 7 2003 9 19)) 09:00-11:30 rrule weekly\n"
|
||||
"&%%(and (diary-cyclic 7 19 9 2003)) 09:00-11:30 rrule weekly\n"
|
||||
"&%%(and (diary-cyclic 7 9 19 2003)) 09:00-11:30 rrule weekly\n")
|
||||
(icalendar-tests--test-import
|
||||
"SUMMARY:rrule monthly no end
|
||||
DTSTART;VALUE=DATE-TIME:20030919T090000
|
||||
DTEND;VALUE=DATE-TIME:20030919T113000
|
||||
RRULE:FREQ=MONTHLY;
|
||||
"
|
||||
"&%%(and (diary-date t t 19) (diary-block 2003 9 19 9999 1 1)) 09:00-11:30 rrule monthly no end"
|
||||
"&%%(and (diary-date 19 t t) (diary-block 19 9 2003 1 1 9999)) 09:00-11:30 rrule monthly no end"
|
||||
"&%%(and (diary-date t 19 t) (diary-block 9 19 2003 1 1 9999)) 09:00-11:30 rrule monthly no end")
|
||||
"&%%(and (diary-date t t 19) (diary-block 2003 9 19 9999 1 1)) 09:00-11:30 rrule monthly no end\n"
|
||||
"&%%(and (diary-date 19 t t) (diary-block 19 9 2003 1 1 9999)) 09:00-11:30 rrule monthly no end\n"
|
||||
"&%%(and (diary-date t 19 t) (diary-block 9 19 2003 1 1 9999)) 09:00-11:30 rrule monthly no end\n")
|
||||
(icalendar-tests--test-import
|
||||
"SUMMARY:rrule monthly with end
|
||||
DTSTART;VALUE=DATE-TIME:20030919T090000
|
||||
DTEND;VALUE=DATE-TIME:20030919T113000
|
||||
RRULE:FREQ=MONTHLY;UNTIL=20050819;
|
||||
"
|
||||
"&%%(and (diary-date t t 19) (diary-block 2003 9 19 2005 8 19)) 09:00-11:30 rrule monthly with end"
|
||||
"&%%(and (diary-date 19 t t) (diary-block 19 9 2003 19 8 2005)) 09:00-11:30 rrule monthly with end"
|
||||
"&%%(and (diary-date t 19 t) (diary-block 9 19 2003 8 19 2005)) 09:00-11:30 rrule monthly with end")
|
||||
"&%%(and (diary-date t t 19) (diary-block 2003 9 19 2005 8 19)) 09:00-11:30 rrule monthly with end\n"
|
||||
"&%%(and (diary-date 19 t t) (diary-block 19 9 2003 19 8 2005)) 09:00-11:30 rrule monthly with end\n"
|
||||
"&%%(and (diary-date t 19 t) (diary-block 9 19 2003 8 19 2005)) 09:00-11:30 rrule monthly with end\n")
|
||||
(icalendar-tests--test-import
|
||||
"DTSTART;VALUE=DATE:20040815
|
||||
DTEND;VALUE=DATE:20040816
|
||||
|
@ -914,81 +883,81 @@ SUMMARY:Maria Himmelfahrt
|
|||
UID:CC56BEA6-49D2-11D8-8833-00039386D1C2-RID
|
||||
RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=8
|
||||
"
|
||||
"&%%(and (diary-anniversary 2004 8 15)) Maria Himmelfahrt"
|
||||
"&%%(and (diary-anniversary 15 8 2004)) Maria Himmelfahrt"
|
||||
"&%%(and (diary-anniversary 8 15 2004)) Maria Himmelfahrt")
|
||||
"&%%(and (diary-anniversary 2004 8 15)) Maria Himmelfahrt\n"
|
||||
"&%%(and (diary-anniversary 15 8 2004)) Maria Himmelfahrt\n"
|
||||
"&%%(and (diary-anniversary 8 15 2004)) Maria Himmelfahrt\n")
|
||||
(icalendar-tests--test-import
|
||||
"SUMMARY:rrule yearly
|
||||
DTSTART;VALUE=DATE-TIME:20030919T090000
|
||||
DTEND;VALUE=DATE-TIME:20030919T113000
|
||||
RRULE:FREQ=YEARLY;INTERVAL=2
|
||||
"
|
||||
"&%%(and (diary-anniversary 2003 9 19)) 09:00-11:30 rrule yearly" ;FIXME
|
||||
"&%%(and (diary-anniversary 19 9 2003)) 09:00-11:30 rrule yearly" ;FIXME
|
||||
"&%%(and (diary-anniversary 9 19 2003)) 09:00-11:30 rrule yearly") ;FIXME
|
||||
"&%%(and (diary-anniversary 2003 9 19)) 09:00-11:30 rrule yearly\n" ;FIXME
|
||||
"&%%(and (diary-anniversary 19 9 2003)) 09:00-11:30 rrule yearly\n" ;FIXME
|
||||
"&%%(and (diary-anniversary 9 19 2003)) 09:00-11:30 rrule yearly\n") ;FIXME
|
||||
(icalendar-tests--test-import
|
||||
"SUMMARY:rrule count daily short
|
||||
DTSTART;VALUE=DATE-TIME:20030919T090000
|
||||
DTEND;VALUE=DATE-TIME:20030919T113000
|
||||
RRULE:FREQ=DAILY;COUNT=1;INTERVAL=1
|
||||
"
|
||||
"&%%(and (diary-cyclic 1 2003 9 19) (diary-block 2003 9 19 2003 9 19)) 09:00-11:30 rrule count daily short"
|
||||
"&%%(and (diary-cyclic 1 19 9 2003) (diary-block 19 9 2003 19 9 2003)) 09:00-11:30 rrule count daily short"
|
||||
"&%%(and (diary-cyclic 1 9 19 2003) (diary-block 9 19 2003 9 19 2003)) 09:00-11:30 rrule count daily short")
|
||||
"&%%(and (diary-cyclic 1 2003 9 19) (diary-block 2003 9 19 2003 9 19)) 09:00-11:30 rrule count daily short\n"
|
||||
"&%%(and (diary-cyclic 1 19 9 2003) (diary-block 19 9 2003 19 9 2003)) 09:00-11:30 rrule count daily short\n"
|
||||
"&%%(and (diary-cyclic 1 9 19 2003) (diary-block 9 19 2003 9 19 2003)) 09:00-11:30 rrule count daily short\n")
|
||||
(icalendar-tests--test-import
|
||||
"SUMMARY:rrule count daily long
|
||||
DTSTART;VALUE=DATE-TIME:20030919T090000
|
||||
DTEND;VALUE=DATE-TIME:20030919T113000
|
||||
RRULE:FREQ=DAILY;COUNT=14;INTERVAL=1
|
||||
"
|
||||
"&%%(and (diary-cyclic 1 2003 9 19) (diary-block 2003 9 19 2003 10 2)) 09:00-11:30 rrule count daily long"
|
||||
"&%%(and (diary-cyclic 1 19 9 2003) (diary-block 19 9 2003 2 10 2003)) 09:00-11:30 rrule count daily long"
|
||||
"&%%(and (diary-cyclic 1 9 19 2003) (diary-block 9 19 2003 10 2 2003)) 09:00-11:30 rrule count daily long")
|
||||
"&%%(and (diary-cyclic 1 2003 9 19) (diary-block 2003 9 19 2003 10 2)) 09:00-11:30 rrule count daily long\n"
|
||||
"&%%(and (diary-cyclic 1 19 9 2003) (diary-block 19 9 2003 2 10 2003)) 09:00-11:30 rrule count daily long\n"
|
||||
"&%%(and (diary-cyclic 1 9 19 2003) (diary-block 9 19 2003 10 2 2003)) 09:00-11:30 rrule count daily long\n")
|
||||
(icalendar-tests--test-import
|
||||
"SUMMARY:rrule count bi-weekly 3 times
|
||||
DTSTART;VALUE=DATE-TIME:20030919T090000
|
||||
DTEND;VALUE=DATE-TIME:20030919T113000
|
||||
RRULE:FREQ=WEEKLY;COUNT=3;INTERVAL=2
|
||||
"
|
||||
"&%%(and (diary-cyclic 14 2003 9 19) (diary-block 2003 9 19 2003 10 31)) 09:00-11:30 rrule count bi-weekly 3 times"
|
||||
"&%%(and (diary-cyclic 14 19 9 2003) (diary-block 19 9 2003 31 10 2003)) 09:00-11:30 rrule count bi-weekly 3 times"
|
||||
"&%%(and (diary-cyclic 14 9 19 2003) (diary-block 9 19 2003 10 31 2003)) 09:00-11:30 rrule count bi-weekly 3 times")
|
||||
"&%%(and (diary-cyclic 14 2003 9 19) (diary-block 2003 9 19 2003 10 31)) 09:00-11:30 rrule count bi-weekly 3 times\n"
|
||||
"&%%(and (diary-cyclic 14 19 9 2003) (diary-block 19 9 2003 31 10 2003)) 09:00-11:30 rrule count bi-weekly 3 times\n"
|
||||
"&%%(and (diary-cyclic 14 9 19 2003) (diary-block 9 19 2003 10 31 2003)) 09:00-11:30 rrule count bi-weekly 3 times\n")
|
||||
(icalendar-tests--test-import
|
||||
"SUMMARY:rrule count monthly
|
||||
DTSTART;VALUE=DATE-TIME:20030919T090000
|
||||
DTEND;VALUE=DATE-TIME:20030919T113000
|
||||
RRULE:FREQ=MONTHLY;INTERVAL=1;COUNT=5
|
||||
"
|
||||
"&%%(and (diary-date t t 19) (diary-block 2003 9 19 2004 1 19)) 09:00-11:30 rrule count monthly"
|
||||
"&%%(and (diary-date 19 t t) (diary-block 19 9 2003 19 1 2004)) 09:00-11:30 rrule count monthly"
|
||||
"&%%(and (diary-date t 19 t) (diary-block 9 19 2003 1 19 2004)) 09:00-11:30 rrule count monthly")
|
||||
"&%%(and (diary-date t t 19) (diary-block 2003 9 19 2004 1 19)) 09:00-11:30 rrule count monthly\n"
|
||||
"&%%(and (diary-date 19 t t) (diary-block 19 9 2003 19 1 2004)) 09:00-11:30 rrule count monthly\n"
|
||||
"&%%(and (diary-date t 19 t) (diary-block 9 19 2003 1 19 2004)) 09:00-11:30 rrule count monthly\n")
|
||||
(icalendar-tests--test-import
|
||||
"SUMMARY:rrule count every second month
|
||||
DTSTART;VALUE=DATE-TIME:20030919T090000
|
||||
DTEND;VALUE=DATE-TIME:20030919T113000
|
||||
RRULE:FREQ=MONTHLY;INTERVAL=2;COUNT=5
|
||||
"
|
||||
"&%%(and (diary-date t t 19) (diary-block 2003 9 19 2004 5 19)) 09:00-11:30 rrule count every second month" ;FIXME
|
||||
"&%%(and (diary-date 19 t t) (diary-block 19 9 2003 19 5 2004)) 09:00-11:30 rrule count every second month" ;FIXME
|
||||
"&%%(and (diary-date t 19 t) (diary-block 9 19 2003 5 19 2004)) 09:00-11:30 rrule count every second month") ;FIXME
|
||||
"&%%(and (diary-date t t 19) (diary-block 2003 9 19 2004 5 19)) 09:00-11:30 rrule count every second month\n" ;FIXME
|
||||
"&%%(and (diary-date 19 t t) (diary-block 19 9 2003 19 5 2004)) 09:00-11:30 rrule count every second month\n" ;FIXME
|
||||
"&%%(and (diary-date t 19 t) (diary-block 9 19 2003 5 19 2004)) 09:00-11:30 rrule count every second month\n") ;FIXME
|
||||
(icalendar-tests--test-import
|
||||
"SUMMARY:rrule count yearly
|
||||
DTSTART;VALUE=DATE-TIME:20030919T090000
|
||||
DTEND;VALUE=DATE-TIME:20030919T113000
|
||||
RRULE:FREQ=YEARLY;INTERVAL=1;COUNT=5
|
||||
"
|
||||
"&%%(and (diary-date t 9 19) (diary-block 2003 9 19 2007 9 19)) 09:00-11:30 rrule count yearly"
|
||||
"&%%(and (diary-date 19 9 t) (diary-block 19 9 2003 19 9 2007)) 09:00-11:30 rrule count yearly"
|
||||
"&%%(and (diary-date 9 19 t) (diary-block 9 19 2003 9 19 2007)) 09:00-11:30 rrule count yearly")
|
||||
"&%%(and (diary-date t 9 19) (diary-block 2003 9 19 2007 9 19)) 09:00-11:30 rrule count yearly\n"
|
||||
"&%%(and (diary-date 19 9 t) (diary-block 19 9 2003 19 9 2007)) 09:00-11:30 rrule count yearly\n"
|
||||
"&%%(and (diary-date 9 19 t) (diary-block 9 19 2003 9 19 2007)) 09:00-11:30 rrule count yearly\n")
|
||||
(icalendar-tests--test-import
|
||||
"SUMMARY:rrule count every second year
|
||||
DTSTART;VALUE=DATE-TIME:20030919T090000
|
||||
DTEND;VALUE=DATE-TIME:20030919T113000
|
||||
RRULE:FREQ=YEARLY;INTERVAL=2;COUNT=5
|
||||
"
|
||||
"&%%(and (diary-date t 9 19) (diary-block 2003 9 19 2011 9 19)) 09:00-11:30 rrule count every second year" ;FIXME!!!
|
||||
"&%%(and (diary-date 19 9 t) (diary-block 19 9 2003 19 9 2011)) 09:00-11:30 rrule count every second year" ;FIXME!!!
|
||||
"&%%(and (diary-date 9 19 t) (diary-block 9 19 2003 9 19 2011)) 09:00-11:30 rrule count every second year") ;FIXME!!!
|
||||
"&%%(and (diary-date t 9 19) (diary-block 2003 9 19 2011 9 19)) 09:00-11:30 rrule count every second year\n" ;FIXME!!!
|
||||
"&%%(and (diary-date 19 9 t) (diary-block 19 9 2003 19 9 2011)) 09:00-11:30 rrule count every second year\n" ;FIXME!!!
|
||||
"&%%(and (diary-date 9 19 t) (diary-block 9 19 2003 9 19 2011)) 09:00-11:30 rrule count every second year\n") ;FIXME!!!
|
||||
)
|
||||
|
||||
(ert-deftest icalendar-import-duration ()
|
||||
|
@ -998,9 +967,9 @@ RRULE:FREQ=YEARLY;INTERVAL=2;COUNT=5
|
|||
SUMMARY:duration
|
||||
DURATION:P7D
|
||||
"
|
||||
"&%%(and (diary-block 2005 2 17 2005 2 23)) duration"
|
||||
"&%%(and (diary-block 17 2 2005 23 2 2005)) duration"
|
||||
"&%%(and (diary-block 2 17 2005 2 23 2005)) duration")
|
||||
"&%%(and (diary-block 2005 2 17 2005 2 23)) duration\n"
|
||||
"&%%(and (diary-block 17 2 2005 23 2 2005)) duration\n"
|
||||
"&%%(and (diary-block 2 17 2005 2 23 2005)) duration\n")
|
||||
(icalendar-tests--test-import
|
||||
"UID:20041127T183329Z-18215-1001-4536-49109@andromeda
|
||||
DTSTAMP:20041127T183315Z
|
||||
|
@ -1014,11 +983,11 @@ SEQUENCE:1
|
|||
CREATED:20041127T183329
|
||||
"
|
||||
"&%%(and (diary-cyclic 1 2001 12 21) (diary-block 2001 12 21 2001 12 29)) Urlaub
|
||||
Class: PUBLIC"
|
||||
Class: PUBLIC\n"
|
||||
"&%%(and (diary-cyclic 1 21 12 2001) (diary-block 21 12 2001 29 12 2001)) Urlaub
|
||||
Class: PUBLIC"
|
||||
Class: PUBLIC\n"
|
||||
"&%%(and (diary-cyclic 1 12 21 2001) (diary-block 12 21 2001 12 29 2001)) Urlaub
|
||||
Class: PUBLIC"))
|
||||
Class: PUBLIC\n"))
|
||||
|
||||
(ert-deftest icalendar-import-bug-6766 ()
|
||||
;;bug#6766 -- multiple byday values in a weekly rrule
|
||||
|
@ -1049,20 +1018,62 @@ UID:8814e3f9-7482-408f-996c-3bfe486a1263
|
|||
Status: CONFIRMED
|
||||
Class: PUBLIC
|
||||
&%%(and (memq (calendar-day-of-week date) '(2 4)) (diary-cyclic 1 2010 4 22)) Tues + Thurs thinking
|
||||
Class: PUBLIC"
|
||||
|
||||
Class: PUBLIC
|
||||
"
|
||||
"&%%(and (memq (calendar-day-of-week date) '(1 3 4 5)) (diary-cyclic 1 21 4 2010)) 11:30-12:00 Scrum
|
||||
Status: CONFIRMED
|
||||
Class: PUBLIC
|
||||
&%%(and (memq (calendar-day-of-week date) '(2 4)) (diary-cyclic 1 22 4 2010)) Tues + Thurs thinking
|
||||
Class: PUBLIC"
|
||||
|
||||
Class: PUBLIC
|
||||
"
|
||||
"&%%(and (memq (calendar-day-of-week date) '(1 3 4 5)) (diary-cyclic 1 4 21 2010)) 11:30-12:00 Scrum
|
||||
Status: CONFIRMED
|
||||
Class: PUBLIC
|
||||
&%%(and (memq (calendar-day-of-week date) '(2 4)) (diary-cyclic 1 4 22 2010)) Tues + Thurs thinking
|
||||
Class: PUBLIC"))
|
||||
Class: PUBLIC
|
||||
"))
|
||||
|
||||
(ert-deftest icalendar-import-multiple-vcalendars ()
|
||||
(icalendar-tests--test-import
|
||||
"DTSTART;VALUE=DATE:20110723
|
||||
SUMMARY:event-1
|
||||
"
|
||||
"&2011/7/23 event-1\n"
|
||||
"&23/7/2011 event-1\n"
|
||||
"&7/23/2011 event-1\n")
|
||||
|
||||
(icalendar-tests--test-import
|
||||
"BEGIN:VCALENDAR
|
||||
PRODID:-//Emacs//NONSGML icalendar.el//EN
|
||||
VERSION:2.0\nBEGIN:VEVENT
|
||||
DTSTART;VALUE=DATE:20110723
|
||||
SUMMARY:event-1
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
BEGIN:VCALENDAR
|
||||
PRODID:-//Emacs//NONSGML icalendar.el//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VEVENT
|
||||
DTSTART;VALUE=DATE:20110724
|
||||
SUMMARY:event-2
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
BEGIN:VCALENDAR
|
||||
PRODID:-//Emacs//NONSGML icalendar.el//EN
|
||||
VERSION:2.0
|
||||
BEGIN:VEVENT
|
||||
DTSTART;VALUE=DATE:20110725
|
||||
SUMMARY:event-3a
|
||||
END:VEVENT
|
||||
BEGIN:VEVENT
|
||||
DTSTART;VALUE=DATE:20110725
|
||||
SUMMARY:event-3b
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
"
|
||||
"&2011/7/23 event-1\n&2011/7/24 event-2\n&2011/7/25 event-3a\n&2011/7/25 event-3b\n"
|
||||
"&23/7/2011 event-1\n&24/7/2011 event-2\n&25/7/2011 event-3a\n&25/7/2011 event-3b\n"
|
||||
"&7/23/2011 event-1\n&7/24/2011 event-2\n&7/25/2011 event-3a\n&7/25/2011 event-3b\n"))
|
||||
|
||||
;; ======================================================================
|
||||
;; Cycle
|
||||
|
@ -1113,7 +1124,7 @@ Argument INPUT icalendar event string."
|
|||
(when (re-search-forward "\nUID:.*\n" nil t)
|
||||
(replace-match "\n"))
|
||||
(let ((cycled (buffer-substring-no-properties (point-min) (point-max))))
|
||||
(should (icalendar-tests--compare-strings cycled org-input)))))
|
||||
(should (string= org-input cycled)))))
|
||||
;; clean up
|
||||
(kill-buffer (find-buffer-visiting temp-diary))
|
||||
(save-excursion
|
||||
|
@ -1211,12 +1222,14 @@ END:VCALENDAR"
|
|||
Desc: 10:30am - Blah
|
||||
Location: Cccc
|
||||
Organizer: MAILTO:aaaaaaa@aaaaaaa.com
|
||||
Status: CONFIRMED"
|
||||
Status: CONFIRMED
|
||||
"
|
||||
"&5/9/2003 10:30-15:30 On-Site Interview
|
||||
Desc: 10:30am - Blah
|
||||
Location: Cccc
|
||||
Organizer: MAILTO:aaaaaaa@aaaaaaa.com
|
||||
Status: CONFIRMED")
|
||||
Status: CONFIRMED
|
||||
")
|
||||
|
||||
;; 2003-06-18 a
|
||||
(icalendar-tests--test-import
|
||||
|
@ -1255,12 +1268,14 @@ END:VALARM"
|
|||
Desc: 753 Zeichen hier radiert
|
||||
Location: 555 or TN 555-5555 ID 5555 & NochWas (see below)
|
||||
Organizer: MAILTO:xxx@xxxxx.com
|
||||
Status: CONFIRMED"
|
||||
Status: CONFIRMED
|
||||
"
|
||||
"&6/23/2003 11:00-12:00 Dress Rehearsal for XXXX-XXXX
|
||||
Desc: 753 Zeichen hier radiert
|
||||
Location: 555 or TN 555-5555 ID 5555 & NochWas (see below)
|
||||
Organizer: MAILTO:xxx@xxxxx.com
|
||||
Status: CONFIRMED")
|
||||
Status: CONFIRMED
|
||||
")
|
||||
;; 2003-06-18 b -- uses timezone
|
||||
(icalendar-tests--test-import
|
||||
"BEGIN:VCALENDAR
|
||||
|
@ -1323,12 +1338,14 @@ END:VCALENDAR"
|
|||
Desc: Viele Zeichen standen hier früher
|
||||
Location: 123 or TN 123-1234 ID abcd & SonstWo (see below)
|
||||
Organizer: MAILTO:bbb@bbbbb.com
|
||||
Status: CONFIRMED"
|
||||
Status: CONFIRMED
|
||||
"
|
||||
"&6/23/2003 17:00-18:00 Updated: Dress Rehearsal for ABC01-15
|
||||
Desc: Viele Zeichen standen hier früher
|
||||
Location: 123 or TN 123-1234 ID abcd & SonstWo (see below)
|
||||
Organizer: MAILTO:bbb@bbbbb.com
|
||||
Status: CONFIRMED")
|
||||
Status: CONFIRMED
|
||||
")
|
||||
;; export 2004-10-28 block entries
|
||||
(icalendar-tests--test-export
|
||||
nil
|
||||
|
@ -1697,7 +1714,8 @@ END:VCALENDAR
|
|||
Class: PRIVATE
|
||||
&%%(and (diary-cyclic 7 1 11 2004)) Wwww aa hhhh
|
||||
Status: TENTATIVE
|
||||
Class: PRIVATE"
|
||||
Class: PRIVATE
|
||||
"
|
||||
"&11/23/2004 14:00-14:30 Jjjjj & Wwwww
|
||||
Status: TENTATIVE
|
||||
Class: PRIVATE
|
||||
|
@ -1716,7 +1734,8 @@ END:VCALENDAR
|
|||
Class: PRIVATE
|
||||
&%%(and (diary-cyclic 7 11 1 2004)) Wwww aa hhhh
|
||||
Status: TENTATIVE
|
||||
Class: PRIVATE")
|
||||
Class: PRIVATE
|
||||
")
|
||||
|
||||
;; 2004-09-09 pg
|
||||
(icalendar-tests--test-export
|
||||
|
@ -1771,11 +1790,13 @@ DTSTAMP
|
|||
"&%%(and (diary-block 6 2 2005 6 2 2005)) Waitangi Day
|
||||
Desc: abcdef
|
||||
Status: CONFIRMED
|
||||
Class: PRIVATE"
|
||||
Class: PRIVATE
|
||||
"
|
||||
"&%%(and (diary-block 2 6 2005 2 6 2005)) Waitangi Day
|
||||
Desc: abcdef
|
||||
Status: CONFIRMED
|
||||
Class: PRIVATE")
|
||||
Class: PRIVATE
|
||||
")
|
||||
|
||||
;; 2005-03-01 lt
|
||||
(icalendar-tests--test-import
|
||||
|
@ -1785,8 +1806,8 @@ UID:6AFA7558-6994-11D9-8A3A-000A95A0E830-RID
|
|||
DTSTAMP:20050118T210335Z
|
||||
DURATION:P7D"
|
||||
nil
|
||||
"&%%(and (diary-block 17 2 2005 23 2 2005)) Hhhhhh Aaaaa ii Aaaaaaaa"
|
||||
"&%%(and (diary-block 2 17 2005 2 23 2005)) Hhhhhh Aaaaa ii Aaaaaaaa")
|
||||
"&%%(and (diary-block 17 2 2005 23 2 2005)) Hhhhhh Aaaaa ii Aaaaaaaa\n"
|
||||
"&%%(and (diary-block 2 17 2005 2 23 2005)) Hhhhhh Aaaaa ii Aaaaaaaa\n")
|
||||
|
||||
;; 2005-03-23 lt
|
||||
(icalendar-tests--test-export
|
||||
|
|
Loading…
Add table
Reference in a new issue