diff options
| author | Joakim Verona | 2011-07-27 11:34:40 +0200 |
|---|---|---|
| committer | Joakim Verona | 2011-07-27 11:34:40 +0200 |
| commit | fac8cc50bdc7afff12e6c3ec6327ecd63d6425bb (patch) | |
| tree | 0db9d4e25a2cce0d17f9c56cf6cbdfc3749d0718 | |
| parent | 0527c8f155cf94a1f6db9bd84b1d86501259a332 (diff) | |
| parent | 1ddd96f5cf0b06846edd03d6b225c31206cee0b7 (diff) | |
| download | emacs-fac8cc50bdc7afff12e6c3ec6327ecd63d6425bb.tar.gz emacs-fac8cc50bdc7afff12e6c3ec6327ecd63d6425bb.zip | |
merge upstream
| -rw-r--r-- | lisp/ChangeLog | 32 | ||||
| -rw-r--r-- | lisp/calendar/icalendar.el | 15 | ||||
| -rw-r--r-- | lisp/net/rcirc.el | 37 | ||||
| -rw-r--r-- | lisp/progmodes/cc-engine.el | 229 | ||||
| -rw-r--r-- | lisp/progmodes/cc-fonts.el | 8 | ||||
| -rw-r--r-- | lisp/progmodes/cc-langs.el | 22 | ||||
| -rw-r--r-- | test/ChangeLog | 22 | ||||
| -rw-r--r-- | test/automated/icalendar-tests.el | 411 |
8 files changed, 452 insertions, 324 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 93674179121..ebbd696eddf 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog | |||
| @@ -1,3 +1,35 @@ | |||
| 1 | 2011-07-27 Leo Liu <sdl.web@gmail.com> | ||
| 2 | |||
| 3 | Simplify url handling in rcirc-mode. | ||
| 4 | |||
| 5 | * net/rcirc.el (rcirc-browse-url-map, rcirc-browse-url-at-point) | ||
| 6 | (rcirc-browse-url-at-mouse): Remove. | ||
| 7 | * net/rcirc.el (rcirc-markup-urls): Use `make-button'. | ||
| 8 | |||
| 9 | 2011-07-26 Alan Mackenzie <acm@muc.de> | ||
| 10 | |||
| 11 | Fontify bitfield declarations properly. | ||
| 12 | |||
| 13 | * progmodes/cc-langs.el (c-has-bitfields): New lang variable. | ||
| 14 | (c-symbol-chars): Now exported as a lang variable. | ||
| 15 | (c-not-primitive-type-keywords): New lang variable. | ||
| 16 | |||
| 17 | * progmodes/cc-fonts.el (c-font-lock-declarations): Jump over the | ||
| 18 | QT keyword "more" to prevent "more slots: ...." being spuriously | ||
| 19 | parsed as a bitfield declaraion. | ||
| 20 | |||
| 21 | * progmodes/cc-engine.el (c-beginning-of-statement-1): Refactor | ||
| 22 | and enhance to handle bitfield declarations. | ||
| 23 | (c-punctuation-in): New function. | ||
| 24 | (c-forward-decl-or-cast-1): Enhance CASE 3 to handle bitfield | ||
| 25 | declarations properly. | ||
| 26 | |||
| 27 | 2011-07-26 Ulf Jasper <ulf.jasper@web.de> | ||
| 28 | |||
| 29 | * calendar/icalendar.el (icalendar--all-events): Take care of | ||
| 30 | multiple vcalendars in a single file. | ||
| 31 | (icalendar--convert-float-to-ical): checkdoc fixes. | ||
| 32 | |||
| 1 | 2011-07-25 Deniz Dogan <deniz@dogan.se> | 33 | 2011-07-25 Deniz Dogan <deniz@dogan.se> |
| 2 | 34 | ||
| 3 | * image.el (insert-image): Clarifying docstring. | 35 | * image.el (insert-image): Clarifying docstring. |
diff --git a/lisp/calendar/icalendar.el b/lisp/calendar/icalendar.el index 03456ba36f2..3ffd55db18d 100644 --- a/lisp/calendar/icalendar.el +++ b/lisp/calendar/icalendar.el | |||
| @@ -412,10 +412,15 @@ children." | |||
| 412 | (setq result subresult))))) | 412 | (setq result subresult))))) |
| 413 | result)) | 413 | result)) |
| 414 | 414 | ||
| 415 | ; private | 415 | ;; private |
| 416 | (defun icalendar--all-events (icalendar) | 416 | (defun icalendar--all-events (icalendar) |
| 417 | "Return the list of all existing events in the given ICALENDAR." | 417 | "Return the list of all existing events in the given ICALENDAR." |
| 418 | (icalendar--get-children (car icalendar) 'VEVENT)) | 418 | (let ((result '())) |
| 419 | (mapc (lambda (elt) | ||
| 420 | (setq result (append (icalendar--get-children elt 'VEVENT) | ||
| 421 | result))) | ||
| 422 | (nreverse icalendar)) | ||
| 423 | result)) | ||
| 419 | 424 | ||
| 420 | (defun icalendar--split-value (value-string) | 425 | (defun icalendar--split-value (value-string) |
| 421 | "Split VALUE-STRING at ';='." | 426 | "Split VALUE-STRING at ';='." |
| @@ -1571,8 +1576,8 @@ entries. ENTRY-MAIN is the first line of the diary entry." | |||
| 1571 | (n (nth 3 sexp)) | 1576 | (n (nth 3 sexp)) |
| 1572 | (day (nth 4 sexp)) | 1577 | (day (nth 4 sexp)) |
| 1573 | (summary | 1578 | (summary |
| 1574 | (replace-regexp-in-string | 1579 | (replace-regexp-in-string |
| 1575 | "\\(^\s+\\|\s+$\\)" "" | 1580 | "\\(^\s+\\|\s+$\\)" "" |
| 1576 | (buffer-substring (point) (point-max))))) | 1581 | (buffer-substring (point) (point-max))))) |
| 1577 | 1582 | ||
| 1578 | (when day | 1583 | (when day |
| @@ -1590,7 +1595,7 @@ entries. ENTRY-MAIN is the first line of the diary entry." | |||
| 1590 | (null (let ((date (calendar-current-date)) | 1595 | (null (let ((date (calendar-current-date)) |
| 1591 | (entry entry-main)) | 1596 | (entry entry-main)) |
| 1592 | (diary-float month dayname n))) | 1597 | (diary-float month dayname n))) |
| 1593 | (concat | 1598 | (concat |
| 1594 | "\nEXDATE;VALUE=DATE:" | 1599 | "\nEXDATE;VALUE=DATE:" |
| 1595 | (format-time-string "%Y%m%d" (current-time)))) | 1600 | (format-time-string "%Y%m%d" (current-time)))) |
| 1596 | "\nRRULE:" | 1601 | "\nRRULE:" |
diff --git a/lisp/net/rcirc.el b/lisp/net/rcirc.el index f7f5f61fafe..9e04abb8cd5 100644 --- a/lisp/net/rcirc.el +++ b/lisp/net/rcirc.el | |||
| @@ -935,14 +935,6 @@ IRC command completion is performed only if '/' is the first input char." | |||
| 935 | map) | 935 | map) |
| 936 | "Keymap for rcirc mode.") | 936 | "Keymap for rcirc mode.") |
| 937 | 937 | ||
| 938 | (defvar rcirc-browse-url-map | ||
| 939 | (let ((map (make-sparse-keymap))) | ||
| 940 | (define-key map (kbd "RET") 'rcirc-browse-url-at-point) | ||
| 941 | (define-key map (kbd "<mouse-2>") 'rcirc-browse-url-at-mouse) | ||
| 942 | (define-key map [follow-link] 'mouse-face) | ||
| 943 | map) | ||
| 944 | "Keymap used for browsing URLs in `rcirc-mode'.") | ||
| 945 | |||
| 946 | (defvar rcirc-short-buffer-name nil | 938 | (defvar rcirc-short-buffer-name nil |
| 947 | "Generated abbreviation to use to indicate buffer activity.") | 939 | "Generated abbreviation to use to indicate buffer activity.") |
| 948 | 940 | ||
| @@ -2351,21 +2343,6 @@ keywords when no KEYWORD is given." | |||
| 2351 | (browse-url (completing-read "rcirc browse-url: " | 2343 | (browse-url (completing-read "rcirc browse-url: " |
| 2352 | completions nil nil initial-input 'history) | 2344 | completions nil nil initial-input 'history) |
| 2353 | arg))) | 2345 | arg))) |
| 2354 | |||
| 2355 | (defun rcirc-browse-url-at-point (point) | ||
| 2356 | "Send URL at point to `browse-url'." | ||
| 2357 | (interactive "d") | ||
| 2358 | (let ((beg (previous-single-property-change (1+ point) 'mouse-face)) | ||
| 2359 | (end (next-single-property-change point 'mouse-face))) | ||
| 2360 | (browse-url (buffer-substring-no-properties beg end)))) | ||
| 2361 | |||
| 2362 | (defun rcirc-browse-url-at-mouse (event) | ||
| 2363 | "Send URL at mouse click to `browse-url'." | ||
| 2364 | (interactive "e") | ||
| 2365 | (let ((position (event-end event))) | ||
| 2366 | (with-current-buffer (window-buffer (posn-window position)) | ||
| 2367 | (rcirc-browse-url-at-point (posn-point position))))) | ||
| 2368 | |||
| 2369 | 2346 | ||
| 2370 | (defun rcirc-markup-timestamp (sender response) | 2347 | (defun rcirc-markup-timestamp (sender response) |
| 2371 | (goto-char (point-min)) | 2348 | (goto-char (point-min)) |
| @@ -2406,12 +2383,16 @@ keywords when no KEYWORD is given." | |||
| 2406 | (while (and rcirc-url-regexp ;; nil means disable URL catching | 2383 | (while (and rcirc-url-regexp ;; nil means disable URL catching |
| 2407 | (re-search-forward rcirc-url-regexp nil t)) | 2384 | (re-search-forward rcirc-url-regexp nil t)) |
| 2408 | (let ((start (match-beginning 0)) | 2385 | (let ((start (match-beginning 0)) |
| 2409 | (end (match-end 0))) | 2386 | (end (match-end 0)) |
| 2410 | (rcirc-add-face start end 'rcirc-url) | 2387 | (url (match-string-no-properties 0))) |
| 2411 | (add-text-properties start end (list 'mouse-face 'highlight | 2388 | (make-button start end |
| 2412 | 'keymap rcirc-browse-url-map)) | 2389 | 'face 'rcirc-url |
| 2390 | 'follow-link t | ||
| 2391 | 'rcirc-url url | ||
| 2392 | 'action (lambda (button) | ||
| 2393 | (browse-url (button-get button 'rcirc-url)))) | ||
| 2413 | ;; record the url | 2394 | ;; record the url |
| 2414 | (push (buffer-substring-no-properties start end) rcirc-urls)))) | 2395 | (push url rcirc-urls)))) |
| 2415 | 2396 | ||
| 2416 | (defun rcirc-markup-keywords (sender response) | 2397 | (defun rcirc-markup-keywords (sender response) |
| 2417 | (when (and (string= response "PRIVMSG") | 2398 | (when (and (string= response "PRIVMSG") |
diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el index a6fd28be21d..0236a2be296 100644 --- a/lisp/progmodes/cc-engine.el +++ b/lisp/progmodes/cc-engine.el | |||
| @@ -709,6 +709,9 @@ comment at the start of cc-engine.el for more info." | |||
| 709 | ;; content was found in the label. Note that we might still | 709 | ;; content was found in the label. Note that we might still |
| 710 | ;; regard it a label if it starts with `c-label-kwds'. | 710 | ;; regard it a label if it starts with `c-label-kwds'. |
| 711 | label-good-pos | 711 | label-good-pos |
| 712 | ;; Putative positions of the components of a bitfield declaration, | ||
| 713 | ;; e.g. "int foo : NUM_FOO_BITS ;" | ||
| 714 | bitfield-type-pos bitfield-id-pos bitfield-size-pos | ||
| 712 | ;; Symbol just scanned back over (e.g. 'while or 'boundary). | 715 | ;; Symbol just scanned back over (e.g. 'while or 'boundary). |
| 713 | ;; See above. | 716 | ;; See above. |
| 714 | sym | 717 | sym |
| @@ -765,13 +768,22 @@ comment at the start of cc-engine.el for more info." | |||
| 765 | ;; Record this as the first token if not starting inside it. | 768 | ;; Record this as the first token if not starting inside it. |
| 766 | (setq tok start)) | 769 | (setq tok start)) |
| 767 | 770 | ||
| 768 | ;; The following while loop goes back one sexp (balanced parens, | 771 | |
| 769 | ;; etc. with contents, or symbol or suchlike) each iteration. This | 772 | ;; The following while loop goes back one sexp (balanced parens, |
| 770 | ;; movement is accomplished with a call to scan-sexps approx 130 lines | 773 | ;; etc. with contents, or symbol or suchlike) each iteration. This |
| 771 | ;; below. | 774 | ;; movement is accomplished with a call to c-backward-sexp approx 170 |
| 775 | ;; lines below. | ||
| 776 | ;; | ||
| 777 | ;; The loop is exited only by throwing nil to the (catch 'loop ...): | ||
| 778 | ;; 1. On reaching the start of a macro; | ||
| 779 | ;; 2. On having passed a stmt boundary with the PDA stack empty; | ||
| 780 | ;; 3. On reaching the start of an Objective C method def; | ||
| 781 | ;; 4. From macro `c-bos-pop-state'; when the stack is empty; | ||
| 782 | ;; 5. From macro `c-bos-pop-state-and-retry' when the stack is empty. | ||
| 772 | (while | 783 | (while |
| 773 | (catch 'loop ;; Throw nil to break, non-nil to continue. | 784 | (catch 'loop ;; Throw nil to break, non-nil to continue. |
| 774 | (cond | 785 | (cond |
| 786 | ;; Are we in a macro, just after the opening #? | ||
| 775 | ((save-excursion | 787 | ((save-excursion |
| 776 | (and macro-start ; Always NIL for AWK. | 788 | (and macro-start ; Always NIL for AWK. |
| 777 | (progn (skip-chars-backward " \t") | 789 | (progn (skip-chars-backward " \t") |
| @@ -792,7 +804,7 @@ comment at the start of cc-engine.el for more info." | |||
| 792 | (setq pos saved | 804 | (setq pos saved |
| 793 | ret 'macro | 805 | ret 'macro |
| 794 | ignore-labels t)) | 806 | ignore-labels t)) |
| 795 | (throw 'loop nil)) | 807 | (throw 'loop nil)) ; 1. Start of macro. |
| 796 | 808 | ||
| 797 | ;; Do a round through the automaton if we've just passed a | 809 | ;; Do a round through the automaton if we've just passed a |
| 798 | ;; statement boundary or passed a "while"-like token. | 810 | ;; statement boundary or passed a "while"-like token. |
| @@ -801,7 +813,7 @@ comment at the start of cc-engine.el for more info." | |||
| 801 | (setq sym (intern (match-string 1))))) | 813 | (setq sym (intern (match-string 1))))) |
| 802 | 814 | ||
| 803 | (when (and (< pos start) (null stack)) | 815 | (when (and (< pos start) (null stack)) |
| 804 | (throw 'loop nil)) | 816 | (throw 'loop nil)) ; 2. Statement boundary. |
| 805 | 817 | ||
| 806 | ;; The PDA state handling. | 818 | ;; The PDA state handling. |
| 807 | ;; | 819 | ;; |
| @@ -918,19 +930,14 @@ comment at the start of cc-engine.el for more info." | |||
| 918 | ;; HERE IS THE SINGLE PLACE INSIDE THE PDA LOOP WHERE WE MOVE | 930 | ;; HERE IS THE SINGLE PLACE INSIDE THE PDA LOOP WHERE WE MOVE |
| 919 | ;; BACKWARDS THROUGH THE SOURCE. | 931 | ;; BACKWARDS THROUGH THE SOURCE. |
| 920 | 932 | ||
| 921 | ;; This is typically fast with the caching done by | ||
| 922 | ;; c-(backward|forward)-sws. | ||
| 923 | (c-backward-syntactic-ws) | 933 | (c-backward-syntactic-ws) |
| 924 | |||
| 925 | (let ((before-sws-pos (point)) | 934 | (let ((before-sws-pos (point)) |
| 926 | ;; Set as long as we have to continue jumping by sexps. | ||
| 927 | ;; It's the position to use as end in the next round. | ||
| 928 | sexp-loop-continue-pos | ||
| 929 | ;; The end position of the area to search for statement | 935 | ;; The end position of the area to search for statement |
| 930 | ;; barriers in this round. | 936 | ;; barriers in this round. |
| 931 | (sexp-loop-end-pos pos)) | 937 | (maybe-after-boundary-pos pos)) |
| 932 | 938 | ||
| 933 | ;; The following while goes back one sexp per iteration. | 939 | ;; Go back over exactly one logical sexp, taking proper |
| 940 | ;; account of macros and escaped EOLs. | ||
| 934 | (while | 941 | (while |
| 935 | (progn | 942 | (progn |
| 936 | (unless (c-safe (c-backward-sexp) t) | 943 | (unless (c-safe (c-backward-sexp) t) |
| @@ -938,81 +945,87 @@ comment at the start of cc-engine.el for more info." | |||
| 938 | ;; stack won't be empty the code below will report a | 945 | ;; stack won't be empty the code below will report a |
| 939 | ;; suitable error. | 946 | ;; suitable error. |
| 940 | (throw 'loop nil)) | 947 | (throw 'loop nil)) |
| 941 | 948 | (cond | |
| 942 | ;; Check if the sexp movement crossed a statement or | 949 | ;; Have we moved into a macro? |
| 943 | ;; declaration boundary. But first modify the point | 950 | ((and (not macro-start) |
| 944 | ;; so that `c-crosses-statement-barrier-p' only looks | 951 | (c-beginning-of-macro)) |
| 945 | ;; at the non-sexp chars following the sexp. | 952 | ;; Have we crossed a statement boundary? If not, |
| 946 | (save-excursion | 953 | ;; keep going back until we find one or a "real" sexp. |
| 947 | (when (setq | 954 | (and |
| 948 | boundary-pos | 955 | (save-excursion |
| 949 | (cond | 956 | (c-end-of-macro) |
| 950 | ((if macro-start | 957 | (not (c-crosses-statement-barrier-p |
| 951 | nil | 958 | (point) maybe-after-boundary-pos))) |
| 952 | (save-excursion | 959 | (setq maybe-after-boundary-pos (point)))) |
| 953 | (when (c-beginning-of-macro) | 960 | ;; Have we just gone back over an escaped NL? This |
| 954 | ;; Set continuation position in case | 961 | ;; doesn't count as a sexp. |
| 955 | ;; `c-crosses-statement-barrier-p' | 962 | ((looking-at "\\\\$"))))) |
| 956 | ;; doesn't detect anything below. | 963 | |
| 957 | (setq sexp-loop-continue-pos (point))))) | 964 | ;; Have we crossed a statement boundary? |
| 958 | ;; If the sexp movement took us into a | 965 | (setq boundary-pos |
| 959 | ;; macro then there were only some non-sexp | 966 | (cond |
| 960 | ;; chars after it. Skip out of the macro | 967 | ;; Are we at a macro beginning? |
| 961 | ;; to analyze them but not the non-sexp | 968 | ((and (not macro-start) |
| 962 | ;; chars that might be inside the macro. | 969 | c-opt-cpp-prefix |
| 963 | (c-end-of-macro) | 970 | (looking-at c-opt-cpp-prefix)) |
| 964 | (c-crosses-statement-barrier-p | 971 | (save-excursion |
| 965 | (point) sexp-loop-end-pos)) | 972 | (c-end-of-macro) |
| 966 | 973 | (c-crosses-statement-barrier-p | |
| 967 | ((and | 974 | (point) maybe-after-boundary-pos))) |
| 968 | (eq (char-after) ?{) | 975 | ;; Just gone back over a brace block? |
| 969 | (not (c-looking-at-inexpr-block lim nil t))) | 976 | ((and |
| 970 | ;; Passed a block sexp. That's a boundary | 977 | (eq (char-after) ?{) |
| 971 | ;; alright. | 978 | (not (c-looking-at-inexpr-block lim nil t))) |
| 972 | (point)) | 979 | (save-excursion |
| 973 | 980 | (c-forward-sexp) (point))) | |
| 974 | ((looking-at "\\s\(") | 981 | ;; Just gone back over some paren block? |
| 975 | ;; Passed some other paren. Only analyze | 982 | ((looking-at "\\s\(") |
| 976 | ;; the non-sexp chars after it. | 983 | (save-excursion |
| 977 | (goto-char (1+ (c-down-list-backward | 984 | (goto-char (1+ (c-down-list-backward |
| 978 | before-sws-pos))) | 985 | before-sws-pos))) |
| 979 | ;; We're at a valid token start position | 986 | (c-crosses-statement-barrier-p |
| 980 | ;; (outside the `save-excursion') if | 987 | (point) maybe-after-boundary-pos))) |
| 981 | ;; `c-crosses-statement-barrier-p' failed. | 988 | ;; Just gone back over an ordinary symbol of some sort? |
| 982 | (c-crosses-statement-barrier-p | 989 | (t (c-crosses-statement-barrier-p |
| 983 | (point) sexp-loop-end-pos)) | 990 | (point) maybe-after-boundary-pos)))) |
| 984 | 991 | ||
| 985 | (t | 992 | (when boundary-pos |
| 986 | ;; Passed a symbol sexp or line | 993 | (setq pptok ptok |
| 987 | ;; continuation. It doesn't matter that | 994 | ptok tok |
| 988 | ;; it's included in the analyzed region. | 995 | tok boundary-pos |
| 989 | (if (c-crosses-statement-barrier-p | 996 | sym 'boundary) |
| 990 | (point) sexp-loop-end-pos) | 997 | ;; Like a C "continue". Analyze the next sexp. |
| 991 | t | 998 | (throw 'loop t)))) |
| 992 | ;; If it was a line continuation then we | ||
| 993 | ;; have to continue looping. | ||
| 994 | (if (looking-at "\\\\$") | ||
| 995 | (setq sexp-loop-continue-pos (point))) | ||
| 996 | nil)))) | ||
| 997 | |||
| 998 | (setq pptok ptok | ||
| 999 | ptok tok | ||
| 1000 | tok boundary-pos | ||
| 1001 | sym 'boundary) | ||
| 1002 | ;; Like a C "continue". Analyze the next sexp. | ||
| 1003 | (throw 'loop t))) | ||
| 1004 | |||
| 1005 | sexp-loop-continue-pos) ; End of "go back a sexp" loop condition. | ||
| 1006 | (goto-char sexp-loop-continue-pos) | ||
| 1007 | (setq sexp-loop-end-pos sexp-loop-continue-pos | ||
| 1008 | sexp-loop-continue-pos nil)))) | ||
| 1009 | 999 | ||
| 1010 | ;; ObjC method def? | 1000 | ;; ObjC method def? |
| 1011 | (when (and c-opt-method-key | 1001 | (when (and c-opt-method-key |
| 1012 | (setq saved (c-in-method-def-p))) | 1002 | (setq saved (c-in-method-def-p))) |
| 1013 | (setq pos saved | 1003 | (setq pos saved |
| 1014 | ignore-labels t) ; Avoid the label check on exit. | 1004 | ignore-labels t) ; Avoid the label check on exit. |
| 1015 | (throw 'loop nil)) | 1005 | (throw 'loop nil)) ; 3. ObjC method def. |
| 1006 | |||
| 1007 | ;; Might we have a bitfield declaration, "<type> <id> : <size>"? | ||
| 1008 | (if c-has-bitfields | ||
| 1009 | (cond | ||
| 1010 | ;; The : <size> and <id> fields? | ||
| 1011 | ((and (numberp c-maybe-labelp) | ||
| 1012 | (not bitfield-size-pos) | ||
| 1013 | (save-excursion | ||
| 1014 | (goto-char (or tok start)) | ||
| 1015 | (not (looking-at c-keywords-regexp))) | ||
| 1016 | (not (looking-at c-keywords-regexp)) | ||
| 1017 | (not (c-punctuation-in (point) c-maybe-labelp))) | ||
| 1018 | (setq bitfield-size-pos (or tok start) | ||
| 1019 | bitfield-id-pos (point))) | ||
| 1020 | ;; The <type> field? | ||
| 1021 | ((and bitfield-id-pos | ||
| 1022 | (not bitfield-type-pos)) | ||
| 1023 | (if (and (looking-at c-symbol-key) ; Can only be an integer type. :-) | ||
| 1024 | (not (looking-at c-not-primitive-type-keywords-regexp)) | ||
| 1025 | (not (c-punctuation-in (point) tok))) | ||
| 1026 | (setq bitfield-type-pos (point)) | ||
| 1027 | (setq bitfield-size-pos nil | ||
| 1028 | bitfield-id-pos nil))))) | ||
| 1016 | 1029 | ||
| 1017 | ;; Handle labels. | 1030 | ;; Handle labels. |
| 1018 | (unless (eq ignore-labels t) | 1031 | (unless (eq ignore-labels t) |
| @@ -1044,8 +1057,10 @@ comment at the start of cc-engine.el for more info." | |||
| 1044 | pptok ptok | 1057 | pptok ptok |
| 1045 | ptok tok | 1058 | ptok tok |
| 1046 | tok (point) | 1059 | tok (point) |
| 1047 | pos tok))) ; Not nil (for the while loop). | 1060 | pos tok) ; always non-nil |
| 1048 | 1061 | ) ; end of (catch loop ....) | |
| 1062 | ) ; end of sexp-at-a-time (while ....) | ||
| 1063 | |||
| 1049 | ;; If the stack isn't empty there might be errors to report. | 1064 | ;; If the stack isn't empty there might be errors to report. |
| 1050 | (while stack | 1065 | (while stack |
| 1051 | (if (and (vectorp saved-pos) (eq (length saved-pos) 3)) | 1066 | (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." | |||
| 1067 | (eq c-maybe-labelp t) | 1082 | (eq c-maybe-labelp t) |
| 1068 | (not (eq ret 'beginning)) | 1083 | (not (eq ret 'beginning)) |
| 1069 | after-labels-pos | 1084 | after-labels-pos |
| 1085 | (not bitfield-type-pos) ; Bitfields take precedence over labels. | ||
| 1070 | (or (not label-good-pos) | 1086 | (or (not label-good-pos) |
| 1071 | (<= label-good-pos pos) | 1087 | (<= label-good-pos pos) |
| 1072 | (progn | 1088 | (progn |
| @@ -1104,6 +1120,19 @@ comment at the start of cc-engine.el for more info." | |||
| 1104 | (goto-char pos) | 1120 | (goto-char pos) |
| 1105 | ret))) | 1121 | ret))) |
| 1106 | 1122 | ||
| 1123 | (defun c-punctuation-in (from to) | ||
| 1124 | "Return non-nil if there is a non-comment non-macro punctuation character | ||
| 1125 | between FROM and TO. FROM must not be in a string or comment. The returned | ||
| 1126 | value is the position of the first such character." | ||
| 1127 | (save-excursion | ||
| 1128 | (goto-char from) | ||
| 1129 | (let ((pos (point))) | ||
| 1130 | (while (progn (skip-chars-forward c-symbol-chars to) | ||
| 1131 | (c-forward-syntactic-ws to) | ||
| 1132 | (> (point) pos)) | ||
| 1133 | (setq pos (point)))) | ||
| 1134 | (and (< (point) to) (point)))) | ||
| 1135 | |||
| 1107 | (defun c-crosses-statement-barrier-p (from to) | 1136 | (defun c-crosses-statement-barrier-p (from to) |
| 1108 | "Return non-nil if buffer positions FROM to TO cross one or more | 1137 | "Return non-nil if buffer positions FROM to TO cross one or more |
| 1109 | statement or declaration boundaries. The returned value is actually | 1138 | statement or declaration boundaries. The returned value is actually |
| @@ -6618,19 +6647,27 @@ comment at the start of cc-engine.el for more info." | |||
| 6618 | (if backup-at-type | 6647 | (if backup-at-type |
| 6619 | (progn | 6648 | (progn |
| 6620 | 6649 | ||
| 6621 | ;; CASE 3 | 6650 | |
| 6622 | (when (= (point) start) | 6651 | ;; CASE 3 |
| 6623 | ;; Got a plain list of identifiers. If a colon follows it's | 6652 | (when (= (point) start) |
| 6624 | ;; a valid label. Otherwise the last one probably is the | 6653 | ;; Got a plain list of identifiers. If a colon follows it's |
| 6625 | ;; declared identifier and we should back up to the previous | 6654 | ;; a valid label, or maybe a bitfield. Otherwise the last |
| 6626 | ;; type, providing it isn't a cast. | 6655 | ;; one probably is the declared identifier and we should |
| 6656 | ;; back up to the previous type, providing it isn't a cast. | ||
| 6627 | (if (and (eq (char-after) ?:) | 6657 | (if (and (eq (char-after) ?:) |
| 6628 | (not (c-major-mode-is 'java-mode))) | 6658 | (not (c-major-mode-is 'java-mode))) |
| 6629 | ;; If we've found a specifier keyword then it's a | 6659 | (cond |
| 6630 | ;; declaration regardless. | 6660 | ;; If we've found a specifier keyword then it's a |
| 6631 | (throw 'at-decl-or-cast (eq at-decl-or-cast t)) | 6661 | ;; declaration regardless. |
| 6632 | (setq backup-if-not-cast t) | 6662 | ((eq at-decl-or-cast t) |
| 6633 | (throw 'at-decl-or-cast t))) | 6663 | (throw 'at-decl-or-cast t)) |
| 6664 | ((and c-has-bitfields | ||
| 6665 | (eq at-decl-or-cast 'ids)) ; bitfield. | ||
| 6666 | (setq backup-if-not-cast t) | ||
| 6667 | (throw 'at-decl-or-cast t))) | ||
| 6668 | |||
| 6669 | (setq backup-if-not-cast t) | ||
| 6670 | (throw 'at-decl-or-cast t))) | ||
| 6634 | 6671 | ||
| 6635 | ;; CASE 4 | 6672 | ;; CASE 4 |
| 6636 | (when (and got-suffix | 6673 | (when (and got-suffix |
diff --git a/lisp/progmodes/cc-fonts.el b/lisp/progmodes/cc-fonts.el index 0500d48ddbc..2277ba760ab 100644 --- a/lisp/progmodes/cc-fonts.el +++ b/lisp/progmodes/cc-fonts.el | |||
| @@ -1179,6 +1179,14 @@ casts and declarations are fontified. Used on level 2 and higher." | |||
| 1179 | (goto-char start-pos))) | 1179 | (goto-char start-pos))) |
| 1180 | 1180 | ||
| 1181 | ;; Now analyze the construct. | 1181 | ;; Now analyze the construct. |
| 1182 | ;; In QT, "more" is an irritating keyword that expands to nothing. | ||
| 1183 | ;; We skip over it to prevent recognition of "more slots: <symbol>" | ||
| 1184 | ;; as a bitfield declaration. | ||
| 1185 | (when (and (c-major-mode-is 'c++-mode) | ||
| 1186 | (looking-at | ||
| 1187 | (concat "\\(more\\)\\([^" c-symbol-chars "]\\|$\\)"))) | ||
| 1188 | (goto-char (match-end 1)) | ||
| 1189 | (c-forward-syntactic-ws)) | ||
| 1182 | (setq decl-or-cast (c-forward-decl-or-cast-1 | 1190 | (setq decl-or-cast (c-forward-decl-or-cast-1 |
| 1183 | match-pos context last-cast-end)) | 1191 | match-pos context last-cast-end)) |
| 1184 | 1192 | ||
diff --git a/lisp/progmodes/cc-langs.el b/lisp/progmodes/cc-langs.el index d7ef278174a..35097242cb7 100644 --- a/lisp/progmodes/cc-langs.el +++ b/lisp/progmodes/cc-langs.el | |||
| @@ -511,6 +511,12 @@ parameters \(point-min), \(point-max) and <buffer size>." | |||
| 511 | 511 | ||
| 512 | ;;; Lexer-level syntax (identifiers, tokens etc). | 512 | ;;; Lexer-level syntax (identifiers, tokens etc). |
| 513 | 513 | ||
| 514 | (c-lang-defconst c-has-bitfields | ||
| 515 | "Whether the language has bitfield declarations." | ||
| 516 | t nil | ||
| 517 | (c c++ objc) t) | ||
| 518 | (c-lang-defvar c-has-bitfields (c-lang-const c-has-bitfields)) | ||
| 519 | |||
| 514 | (c-lang-defconst c-symbol-start | 520 | (c-lang-defconst c-symbol-start |
| 515 | "Regexp that matches the start of a symbol, i.e. any identifier or | 521 | "Regexp that matches the start of a symbol, i.e. any identifier or |
| 516 | keyword. It's unspecified how far it matches. Does not contain a \\| | 522 | 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." | |||
| 528 | ;; operator chars too, but they are handled with other means instead. | 534 | ;; operator chars too, but they are handled with other means instead. |
| 529 | t (concat c-alnum "_$") | 535 | t (concat c-alnum "_$") |
| 530 | objc (concat c-alnum "_$@")) | 536 | objc (concat c-alnum "_$@")) |
| 537 | (c-lang-defvar c-symbol-chars (c-lang-const c-symbol-chars)) | ||
| 531 | 538 | ||
| 532 | (c-lang-defconst c-symbol-key | 539 | (c-lang-defconst c-symbol-key |
| 533 | "Regexp matching identifiers and keywords (with submatch 0). Assumed | 540 | "Regexp matching identifiers and keywords (with submatch 0). Assumed |
| @@ -1927,6 +1934,21 @@ one of `c-type-list-kwds', `c-ref-list-kwds', | |||
| 1927 | (c-lang-defvar c-not-decl-init-keywords | 1934 | (c-lang-defvar c-not-decl-init-keywords |
| 1928 | (c-lang-const c-not-decl-init-keywords)) | 1935 | (c-lang-const c-not-decl-init-keywords)) |
| 1929 | 1936 | ||
| 1937 | (c-lang-defconst c-not-primitive-type-keywords | ||
| 1938 | "List of all keywords apart from primitive types (like \"int\")." | ||
| 1939 | t (set-difference (c-lang-const c-keywords) | ||
| 1940 | (c-lang-const c-primitive-type-kwds) | ||
| 1941 | :test 'string-equal) | ||
| 1942 | ;; The "more" for C++ is the QT keyword (as in "more slots:"). | ||
| 1943 | ;; This variable is intended for use in c-beginning-of-statement-1. | ||
| 1944 | c++ (append (c-lang-const c-not-primitive-type-keywords) '("more"))) | ||
| 1945 | |||
| 1946 | (c-lang-defconst c-not-primitive-type-keywords-regexp | ||
| 1947 | t (c-make-keywords-re t | ||
| 1948 | (c-lang-const c-not-primitive-type-keywords))) | ||
| 1949 | (c-lang-defvar c-not-primitive-type-keywords-regexp | ||
| 1950 | (c-lang-const c-not-primitive-type-keywords-regexp)) | ||
| 1951 | |||
| 1930 | (c-lang-defconst c-protection-kwds | 1952 | (c-lang-defconst c-protection-kwds |
| 1931 | "Access protection label keywords in classes." | 1953 | "Access protection label keywords in classes." |
| 1932 | t nil | 1954 | t nil |
diff --git a/test/ChangeLog b/test/ChangeLog index add4d9c7664..11b3d9b5e2d 100644 --- a/test/ChangeLog +++ b/test/ChangeLog | |||
| @@ -1,3 +1,25 @@ | |||
| 1 | 2011-07-26 Ulf Jasper <ulf.jasper@web.de> | ||
| 2 | |||
| 3 | * automated/icalendar-tests.el (icalendar-tests--compare-strings): | ||
| 4 | Removed, simply use string=. | ||
| 5 | (icalendar--diarytime-to-isotime) | ||
| 6 | (icalendar--datetime-to-diary-date) | ||
| 7 | (icalendar--datestring-to-isodate) | ||
| 8 | (icalendar--format-ical-event) | ||
| 9 | (icalendar--parse-summary-and-rest) | ||
| 10 | (icalendar-tests--do-test-import) | ||
| 11 | (icalendar-tests--do-test-cycle) : Changed argument order of | ||
| 12 | string= to EXPECTED ACTUAL. | ||
| 13 | (icalendar--import-format-sample) | ||
| 14 | (icalendar--format-ical-event) | ||
| 15 | (icalendar-import-non-recurring) | ||
| 16 | (icalendar-import-rrule) | ||
| 17 | (icalendar-import-duration) | ||
| 18 | (icalendar-import-bug-6766) | ||
| 19 | (icalendar-real-world): Adjusted to string= instead of | ||
| 20 | icalendar-tests--compare-strings. | ||
| 21 | (icalendar-import-multiple-vcalendars): New. | ||
| 22 | |||
| 1 | 2011-05-11 Teodor Zlatanov <tzz@lifelogs.com> | 23 | 2011-05-11 Teodor Zlatanov <tzz@lifelogs.com> |
| 2 | 24 | ||
| 3 | * automated/gnus-tests.el: Add wrapper for Gnus tests. | 25 | * automated/gnus-tests.el: Add wrapper for Gnus tests. |
diff --git a/test/automated/icalendar-tests.el b/test/automated/icalendar-tests.el index d586230f642..04fce7383fd 100644 --- a/test/automated/icalendar-tests.el +++ b/test/automated/icalendar-tests.el | |||
| @@ -51,35 +51,6 @@ | |||
| 51 | (replace-regexp-in-string "[ \t\n]+\\'" "" | 51 | (replace-regexp-in-string "[ \t\n]+\\'" "" |
| 52 | (replace-regexp-in-string "\\`[ \t\n]+" "" string))) | 52 | (replace-regexp-in-string "\\`[ \t\n]+" "" string))) |
| 53 | 53 | ||
| 54 | (defun icalendar-tests--compare-strings (str1 str2) | ||
| 55 | "Compare strings STR1 and STR2. | ||
| 56 | Return t if strings are equal, else return substring indicating first difference. | ||
| 57 | FIXME: make this a little smarter." | ||
| 58 | (let* ((s1 (icalendar-tests--trim str1)) | ||
| 59 | (s2 (icalendar-tests--trim str2)) | ||
| 60 | (result (compare-strings s1 0 nil s2 0 nil)) | ||
| 61 | (len (length str2))) | ||
| 62 | (if (numberp result) | ||
| 63 | (if (> result 0) | ||
| 64 | (concat "..." (substring str2 (- result 1) | ||
| 65 | (min len (+ (- result 1) 3))) "...") | ||
| 66 | (concat "..." (substring str2 (- (+ result 1)) | ||
| 67 | (min len (+ (- (+ result 1)) 3))) "...")) | ||
| 68 | t))) | ||
| 69 | |||
| 70 | (ert-deftest icalendar-tests--compare-strings () | ||
| 71 | "Test icalendar-tests--compare-strings." | ||
| 72 | (should (equal t (icalendar-tests--compare-strings " abcde" "abcde "))) | ||
| 73 | (should | ||
| 74 | (string= "...def..." | ||
| 75 | (icalendar-tests--compare-strings "abcxe" "abcdefghijklmn"))) | ||
| 76 | (should (string= "...xe..." | ||
| 77 | (icalendar-tests--compare-strings "abcde" "abcxe"))) | ||
| 78 | (should (string= "...ddd..." | ||
| 79 | (icalendar-tests--compare-strings "abc" "abcdddddd"))) | ||
| 80 | (should (string= "......" | ||
| 81 | (icalendar-tests--compare-strings "abcdefghij" "abc")))) | ||
| 82 | |||
| 83 | ;; ====================================================================== | 54 | ;; ====================================================================== |
| 84 | ;; Tests of functions | 55 | ;; Tests of functions |
| 85 | ;; ====================================================================== | 56 | ;; ====================================================================== |
| @@ -269,85 +240,85 @@ END:VTIMEZONE | |||
| 269 | 240 | ||
| 270 | (ert-deftest icalendar--diarytime-to-isotime () | 241 | (ert-deftest icalendar--diarytime-to-isotime () |
| 271 | "Test method for `icalendar--diarytime-to-isotime'." | 242 | "Test method for `icalendar--diarytime-to-isotime'." |
| 272 | (should (string= (icalendar--diarytime-to-isotime "01:15" "") | 243 | (should (string= "T011500" |
| 273 | "T011500")) | 244 | (icalendar--diarytime-to-isotime "01:15" ""))) |
| 274 | (should (string= (icalendar--diarytime-to-isotime "1:15" "") | 245 | (should (string= "T011500" |
| 275 | "T011500")) | 246 | (icalendar--diarytime-to-isotime "1:15" ""))) |
| 276 | (should (string= (icalendar--diarytime-to-isotime "0:01" "") | 247 | (should (string= "T000100" |
| 277 | "T000100")) | 248 | (icalendar--diarytime-to-isotime "0:01" ""))) |
| 278 | (should (string= (icalendar--diarytime-to-isotime "0100" "") | 249 | (should (string= "T010000" |
| 279 | "T010000")) | 250 | (icalendar--diarytime-to-isotime "0100" ""))) |
| 280 | (should (string= (icalendar--diarytime-to-isotime "0100" "am") | 251 | (should (string= "T010000" |
| 281 | "T010000")) | 252 | (icalendar--diarytime-to-isotime "0100" "am"))) |
| 282 | (should (string= (icalendar--diarytime-to-isotime "0100" "pm") | 253 | (should (string= "T130000" |
| 283 | "T130000")) | 254 | (icalendar--diarytime-to-isotime "0100" "pm"))) |
| 284 | (should (string= (icalendar--diarytime-to-isotime "1200" "") | 255 | (should (string= "T120000" |
| 285 | "T120000")) | 256 | (icalendar--diarytime-to-isotime "1200" ""))) |
| 286 | (should (string= (icalendar--diarytime-to-isotime "17:17" "") | 257 | (should (string= "T171700" |
| 287 | "T171700")) | 258 | (icalendar--diarytime-to-isotime "17:17" ""))) |
| 288 | (should (string= (icalendar--diarytime-to-isotime "1200" "am") | 259 | (should (string= "T000000" |
| 289 | "T000000")) | 260 | (icalendar--diarytime-to-isotime "1200" "am"))) |
| 290 | (should (string= (icalendar--diarytime-to-isotime "1201" "am") | 261 | (should (string= "T000100" |
| 291 | "T000100")) | 262 | (icalendar--diarytime-to-isotime "1201" "am"))) |
| 292 | (should (string= (icalendar--diarytime-to-isotime "1259" "am") | 263 | (should (string= "T005900" |
| 293 | "T005900")) | 264 | (icalendar--diarytime-to-isotime "1259" "am"))) |
| 294 | (should (string= (icalendar--diarytime-to-isotime "1200" "pm") | 265 | (should (string= "T120000" |
| 295 | "T120000")) | 266 | (icalendar--diarytime-to-isotime "1200" "pm"))) |
| 296 | (should (string= (icalendar--diarytime-to-isotime "1201" "pm") | 267 | (should (string= "T120100" |
| 297 | "T120100")) | 268 | (icalendar--diarytime-to-isotime "1201" "pm"))) |
| 298 | (should (string= (icalendar--diarytime-to-isotime "1259" "pm") | 269 | (should (string= "T125900" |
| 299 | "T125900"))) | 270 | (icalendar--diarytime-to-isotime "1259" "pm")))) |
| 300 | 271 | ||
| 301 | (ert-deftest icalendar--datetime-to-diary-date () | 272 | (ert-deftest icalendar--datetime-to-diary-date () |
| 302 | "Test method for `icalendar--datetime-to-diary-date'." | 273 | "Test method for `icalendar--datetime-to-diary-date'." |
| 303 | (let* ((datetime '(59 59 23 31 12 2008)) | 274 | (let* ((datetime '(59 59 23 31 12 2008)) |
| 304 | (calendar-date-style 'iso)) | 275 | (calendar-date-style 'iso)) |
| 305 | (should (string= (icalendar--datetime-to-diary-date datetime) | 276 | (should (string= "2008 12 31" |
| 306 | "2008 12 31")) | 277 | (icalendar--datetime-to-diary-date datetime))) |
| 307 | (setq calendar-date-style 'european) | 278 | (setq calendar-date-style 'european) |
| 308 | (should (string= (icalendar--datetime-to-diary-date datetime) | 279 | (should (string= "31 12 2008" |
| 309 | "31 12 2008")) | 280 | (icalendar--datetime-to-diary-date datetime))) |
| 310 | (setq calendar-date-style 'american) | 281 | (setq calendar-date-style 'american) |
| 311 | (should (string= (icalendar--datetime-to-diary-date datetime) | 282 | (should (string= "12 31 2008" |
| 312 | "12 31 2008")))) | 283 | (icalendar--datetime-to-diary-date datetime))))) |
| 313 | 284 | ||
| 314 | (ert-deftest icalendar--datestring-to-isodate () | 285 | (ert-deftest icalendar--datestring-to-isodate () |
| 315 | "Test method for `icalendar--datestring-to-isodate'." | 286 | "Test method for `icalendar--datestring-to-isodate'." |
| 316 | (let ((calendar-date-style 'iso)) | 287 | (let ((calendar-date-style 'iso)) |
| 317 | ;; numeric iso | 288 | ;; numeric iso |
| 318 | (should (string= (icalendar--datestring-to-isodate "2008 05 11") | 289 | (should (string= "20080511" |
| 319 | "20080511")) | 290 | (icalendar--datestring-to-isodate "2008 05 11"))) |
| 320 | (should (string= (icalendar--datestring-to-isodate "2008 05 31") | 291 | (should (string= "20080531" |
| 321 | "20080531")) | 292 | (icalendar--datestring-to-isodate "2008 05 31"))) |
| 322 | (should (string= (icalendar--datestring-to-isodate "2008 05 31" 2) | 293 | (should (string= "20080602" |
| 323 | "20080602")) | 294 | (icalendar--datestring-to-isodate "2008 05 31" 2))) |
| 324 | 295 | ||
| 325 | ;; numeric european | 296 | ;; numeric european |
| 326 | (setq calendar-date-style 'european) | 297 | (setq calendar-date-style 'european) |
| 327 | (should (string= (icalendar--datestring-to-isodate "11 05 2008") | 298 | (should (string= "20080511" |
| 328 | "20080511")) | 299 | (icalendar--datestring-to-isodate "11 05 2008"))) |
| 329 | (should (string= (icalendar--datestring-to-isodate "31 05 2008") | 300 | (should (string= "20080531" |
| 330 | "20080531")) | 301 | (icalendar--datestring-to-isodate "31 05 2008"))) |
| 331 | (should (string= (icalendar--datestring-to-isodate "31 05 2008" 2) | 302 | (should (string= "20080602" |
| 332 | "20080602")) | 303 | (icalendar--datestring-to-isodate "31 05 2008" 2))) |
| 333 | 304 | ||
| 334 | ;; numeric american | 305 | ;; numeric american |
| 335 | (setq calendar-date-style 'american) | 306 | (setq calendar-date-style 'american) |
| 336 | (should (string= (icalendar--datestring-to-isodate "11 05 2008") | 307 | (should (string= "20081105" |
| 337 | "20081105")) | 308 | (icalendar--datestring-to-isodate "11 05 2008"))) |
| 338 | (should (string= (icalendar--datestring-to-isodate "12 30 2008") | 309 | (should (string= "20081230" |
| 339 | "20081230")) | 310 | (icalendar--datestring-to-isodate "12 30 2008"))) |
| 340 | (should (string= (icalendar--datestring-to-isodate "12 30 2008" 2) | 311 | (should (string= "20090101" |
| 341 | "20090101")) | 312 | (icalendar--datestring-to-isodate "12 30 2008" 2))) |
| 342 | 313 | ||
| 343 | ;; non-numeric | 314 | ;; non-numeric |
| 344 | (setq calendar-date-style nil) ;not necessary for conversion | 315 | (setq calendar-date-style nil) ;not necessary for conversion |
| 345 | (should (string= (icalendar--datestring-to-isodate "Nov 05 2008") | 316 | (should (string= "20081105" |
| 346 | "20081105")) | 317 | (icalendar--datestring-to-isodate "Nov 05 2008"))) |
| 347 | (should (string= (icalendar--datestring-to-isodate "05 Nov 2008") | 318 | (should (string= "20081105" |
| 348 | "20081105")) | 319 | (icalendar--datestring-to-isodate "05 Nov 2008"))) |
| 349 | (should (string= (icalendar--datestring-to-isodate "2008 Nov 05") | 320 | (should (string= "20081105" |
| 350 | "20081105")))) | 321 | (icalendar--datestring-to-isodate "2008 Nov 05"))))) |
| 351 | 322 | ||
| 352 | (ert-deftest icalendar--first-weekday-of-year () | 323 | (ert-deftest icalendar--first-weekday-of-year () |
| 353 | "Test method for `icalendar-first-weekday-of-year'." | 324 | "Test method for `icalendar-first-weekday-of-year'." |
| @@ -363,7 +334,9 @@ END:VTIMEZONE | |||
| 363 | 334 | ||
| 364 | (ert-deftest icalendar--import-format-sample () | 335 | (ert-deftest icalendar--import-format-sample () |
| 365 | "Test method for `icalendar-import-format-sample'." | 336 | "Test method for `icalendar-import-format-sample'." |
| 366 | (should (string= (icalendar-import-format-sample | 337 | (should (string= (concat "SUMMARY=`a' DESCRIPTION=`b' LOCATION=`c' " |
| 338 | "ORGANIZER=`d' STATUS=`' URL=`' CLASS=`'") | ||
| 339 | (icalendar-import-format-sample | ||
| 367 | (icalendar-tests--get-ical-event "BEGIN:VEVENT | 340 | (icalendar-tests--get-ical-event "BEGIN:VEVENT |
| 368 | DTSTAMP:20030509T043439Z | 341 | DTSTAMP:20030509T043439Z |
| 369 | DTSTART:20030509T103000 | 342 | DTSTART:20030509T103000 |
| @@ -373,9 +346,7 @@ LOCATION:c | |||
| 373 | DTEND:20030509T153000 | 346 | DTEND:20030509T153000 |
| 374 | DESCRIPTION:b | 347 | DESCRIPTION:b |
| 375 | END:VEVENT | 348 | END:VEVENT |
| 376 | ")) | 349 | "))))) |
| 377 | (concat "SUMMARY=`a' DESCRIPTION=`b' LOCATION=`c' " | ||
| 378 | "ORGANIZER=`d' STATUS=`' URL=`' CLASS=`'")))) | ||
| 379 | 350 | ||
| 380 | (ert-deftest icalendar--format-ical-event () | 351 | (ert-deftest icalendar--format-ical-event () |
| 381 | "Test `icalendar--format-ical-event'." | 352 | "Test `icalendar--format-ical-event'." |
| @@ -397,12 +368,11 @@ DTEND:20030509T153000 | |||
| 397 | DESCRIPTION:des | 368 | DESCRIPTION:des |
| 398 | END:VEVENT | 369 | END:VEVENT |
| 399 | "))) | 370 | "))) |
| 400 | (should (string= (icalendar--format-ical-event event) | 371 | (should (string= "SUM sum DES des LOC loc ORG org" |
| 401 | "SUM sum DES des LOC loc ORG org")) | 372 | (icalendar--format-ical-event event))) |
| 402 | (setq icalendar-import-format (lambda (&rest ignore) | 373 | (setq icalendar-import-format (lambda (&rest ignore) |
| 403 | "helloworld")) | 374 | "helloworld")) |
| 404 | (should (string= (icalendar--format-ical-event event) | 375 | (should (string= "helloworld" (icalendar--format-ical-event event))) |
| 405 | "helloworld")) | ||
| 406 | (setq icalendar-import-format | 376 | (setq icalendar-import-format |
| 407 | (lambda (e) | 377 | (lambda (e) |
| 408 | (format "-%s-%s-%s-%s-%s-%s-%s-" | 378 | (format "-%s-%s-%s-%s-%s-%s-%s-" |
| @@ -413,8 +383,8 @@ END:VEVENT | |||
| 413 | (icalendar--get-event-property event 'STATUS) | 383 | (icalendar--get-event-property event 'STATUS) |
| 414 | (icalendar--get-event-property event 'URL) | 384 | (icalendar--get-event-property event 'URL) |
| 415 | (icalendar--get-event-property event 'CLASS)))) | 385 | (icalendar--get-event-property event 'CLASS)))) |
| 416 | (should (string= (icalendar--format-ical-event event) | 386 | (should (string= "-sum-des-loc-org-nil-nil-nil-" |
| 417 | "-sum-des-loc-org-nil-nil-nil-")))) | 387 | (icalendar--format-ical-event event))))) |
| 418 | 388 | ||
| 419 | (ert-deftest icalendar--parse-summary-and-rest () | 389 | (ert-deftest icalendar--parse-summary-and-rest () |
| 420 | "Test `icalendar--parse-summary-and-rest'." | 390 | "Test `icalendar--parse-summary-and-rest'." |
| @@ -428,15 +398,15 @@ END:VEVENT | |||
| 428 | (icalendar-import-format-class " CLA %s") | 398 | (icalendar-import-format-class " CLA %s") |
| 429 | (result)) | 399 | (result)) |
| 430 | (setq result (icalendar--parse-summary-and-rest "SUM sum ORG org")) | 400 | (setq result (icalendar--parse-summary-and-rest "SUM sum ORG org")) |
| 431 | (should (string= (cdr (assoc 'org result)) "org")) | 401 | (should (string= "org" (cdr (assoc 'org result)))) |
| 432 | 402 | ||
| 433 | (setq result (icalendar--parse-summary-and-rest | 403 | (setq result (icalendar--parse-summary-and-rest |
| 434 | "SUM sum DES des LOC loc ORG org STA sta URL url CLA cla")) | 404 | "SUM sum DES des LOC loc ORG org STA sta URL url CLA cla")) |
| 435 | (should (string= (cdr (assoc 'des result)) "des")) | 405 | (should (string= "des" (cdr (assoc 'des result)))) |
| 436 | (should (string= (cdr (assoc 'loc result)) "loc")) | 406 | (should (string= "loc" (cdr (assoc 'loc result)))) |
| 437 | (should (string= (cdr (assoc 'org result)) "org")) | 407 | (should (string= "org" (cdr (assoc 'org result)))) |
| 438 | (should (string= (cdr (assoc 'sta result)) "sta")) | 408 | (should (string= "sta" (cdr (assoc 'sta result)))) |
| 439 | (should (string= (cdr (assoc 'cla result)) "cla")) | 409 | (should (string= "cla" (cdr (assoc 'cla result)))) |
| 440 | 410 | ||
| 441 | (setq icalendar-import-format (lambda () "Hello world")) | 411 | (setq icalendar-import-format (lambda () "Hello world")) |
| 442 | (setq result (icalendar--parse-summary-and-rest | 412 | (setq result (icalendar--parse-summary-and-rest |
| @@ -738,12 +708,10 @@ Argument INPUT input icalendar string. | |||
| 738 | Argument EXPECTED-OUTPUT expected diary string." | 708 | Argument EXPECTED-OUTPUT expected diary string." |
| 739 | (let ((temp-file (make-temp-file "icalendar-test-diary"))) | 709 | (let ((temp-file (make-temp-file "icalendar-test-diary"))) |
| 740 | (icalendar-import-buffer temp-file t t) | 710 | (icalendar-import-buffer temp-file t t) |
| 741 | (unwind-protect | 711 | (save-excursion |
| 742 | (save-excursion | 712 | (find-file temp-file) |
| 743 | (find-file temp-file) | 713 | (let ((result (buffer-substring-no-properties (point-min) (point-max)))) |
| 744 | (let ((result (buffer-substring-no-properties (point-min) (point-max)))) | 714 | (should (string= expected-output result))) |
| 745 | (should (icalendar-tests--compare-strings result | ||
| 746 | expected-output)))) | ||
| 747 | (kill-buffer (find-buffer-visiting temp-file)) | 715 | (kill-buffer (find-buffer-visiting temp-file)) |
| 748 | (delete-file temp-file)))) | 716 | (delete-file temp-file)))) |
| 749 | 717 | ||
| @@ -753,23 +721,23 @@ Argument EXPECTED-OUTPUT expected diary string." | |||
| 753 | "SUMMARY:non-recurring | 721 | "SUMMARY:non-recurring |
| 754 | DTSTART;VALUE=DATE-TIME:20030919T090000 | 722 | DTSTART;VALUE=DATE-TIME:20030919T090000 |
| 755 | DTEND;VALUE=DATE-TIME:20030919T113000" | 723 | DTEND;VALUE=DATE-TIME:20030919T113000" |
| 756 | "&2003/9/19 09:00-11:30 non-recurring" | 724 | "&2003/9/19 09:00-11:30 non-recurring\n" |
| 757 | "&19/9/2003 09:00-11:30 non-recurring" | 725 | "&19/9/2003 09:00-11:30 non-recurring\n" |
| 758 | "&9/19/2003 09:00-11:30 non-recurring") | 726 | "&9/19/2003 09:00-11:30 non-recurring\n") |
| 759 | (icalendar-tests--test-import | 727 | (icalendar-tests--test-import |
| 760 | "SUMMARY:non-recurring allday | 728 | "SUMMARY:non-recurring allday |
| 761 | DTSTART;VALUE=DATE-TIME:20030919" | 729 | DTSTART;VALUE=DATE-TIME:20030919" |
| 762 | "&2003/9/19 non-recurring allday" | 730 | "&2003/9/19 non-recurring allday\n" |
| 763 | "&19/9/2003 non-recurring allday" | 731 | "&19/9/2003 non-recurring allday\n" |
| 764 | "&9/19/2003 non-recurring allday") | 732 | "&9/19/2003 non-recurring allday\n") |
| 765 | (icalendar-tests--test-import | 733 | (icalendar-tests--test-import |
| 766 | ;; do not remove the trailing blank after "long"! | 734 | ;; do not remove the trailing blank after "long"! |
| 767 | "SUMMARY:long | 735 | "SUMMARY:long |
| 768 | summary | 736 | summary |
| 769 | DTSTART;VALUE=DATE:20030919" | 737 | DTSTART;VALUE=DATE:20030919" |
| 770 | "&2003/9/19 long summary" | 738 | "&2003/9/19 long summary\n" |
| 771 | "&19/9/2003 long summary" | 739 | "&19/9/2003 long summary\n" |
| 772 | "&9/19/2003 long summary") | 740 | "&9/19/2003 long summary\n") |
| 773 | (icalendar-tests--test-import | 741 | (icalendar-tests--test-import |
| 774 | "UID:748f2da0-0d9b-11d8-97af-b4ec8686ea61 | 742 | "UID:748f2da0-0d9b-11d8-97af-b4ec8686ea61 |
| 775 | SUMMARY:Sommerferien | 743 | SUMMARY:Sommerferien |
| @@ -791,7 +759,8 @@ DTSTAMP:20031103T011641Z | |||
| 791 | " | 759 | " |
| 792 | "&%%(and (diary-block 7 19 2004 8 27 2004)) Sommerferien | 760 | "&%%(and (diary-block 7 19 2004 8 27 2004)) Sommerferien |
| 793 | Status: TENTATIVE | 761 | Status: TENTATIVE |
| 794 | Class: PRIVATE") | 762 | Class: PRIVATE |
| 763 | ") | ||
| 795 | (icalendar-tests--test-import | 764 | (icalendar-tests--test-import |
| 796 | "UID | 765 | "UID |
| 797 | :04979712-3902-11d9-93dd-8f9f4afe08da | 766 | :04979712-3902-11d9-93dd-8f9f4afe08da |
| @@ -814,13 +783,13 @@ LAST-MODIFIED | |||
| 814 | " | 783 | " |
| 815 | "&2004/11/23 14:00-14:30 folded summary | 784 | "&2004/11/23 14:00-14:30 folded summary |
| 816 | Status: TENTATIVE | 785 | Status: TENTATIVE |
| 817 | Class: PRIVATE" | 786 | Class: PRIVATE\n" |
| 818 | "&23/11/2004 14:00-14:30 folded summary | 787 | "&23/11/2004 14:00-14:30 folded summary |
| 819 | Status: TENTATIVE | 788 | Status: TENTATIVE |
| 820 | Class: PRIVATE" | 789 | Class: PRIVATE\n" |
| 821 | "&11/23/2004 14:00-14:30 folded summary | 790 | "&11/23/2004 14:00-14:30 folded summary |
| 822 | Status: TENTATIVE | 791 | Status: TENTATIVE |
| 823 | Class: PRIVATE") | 792 | Class: PRIVATE\n") |
| 824 | 793 | ||
| 825 | (icalendar-tests--test-import | 794 | (icalendar-tests--test-import |
| 826 | "UID | 795 | "UID |
| @@ -842,13 +811,13 @@ DTSTAMP | |||
| 842 | " | 811 | " |
| 843 | "&2004/11/23 14:45-15:45 another example | 812 | "&2004/11/23 14:45-15:45 another example |
| 844 | Status: TENTATIVE | 813 | Status: TENTATIVE |
| 845 | Class: PRIVATE" | 814 | Class: PRIVATE\n" |
| 846 | "&23/11/2004 14:45-15:45 another example | 815 | "&23/11/2004 14:45-15:45 another example |
| 847 | Status: TENTATIVE | 816 | Status: TENTATIVE |
| 848 | Class: PRIVATE" | 817 | Class: PRIVATE\n" |
| 849 | "&11/23/2004 14:45-15:45 another example | 818 | "&11/23/2004 14:45-15:45 another example |
| 850 | Status: TENTATIVE | 819 | Status: TENTATIVE |
| 851 | Class: PRIVATE")) | 820 | Class: PRIVATE\n")) |
| 852 | 821 | ||
| 853 | (ert-deftest icalendar-import-rrule () | 822 | (ert-deftest icalendar-import-rrule () |
| 854 | (icalendar-tests--test-import | 823 | (icalendar-tests--test-import |
| @@ -857,9 +826,9 @@ DTSTART;VALUE=DATE-TIME:20030919T090000 | |||
| 857 | DTEND;VALUE=DATE-TIME:20030919T113000 | 826 | DTEND;VALUE=DATE-TIME:20030919T113000 |
| 858 | RRULE:FREQ=DAILY; | 827 | RRULE:FREQ=DAILY; |
| 859 | " | 828 | " |
| 860 | "&%%(and (diary-cyclic 1 2003 9 19)) 09:00-11:30 rrule daily" | 829 | "&%%(and (diary-cyclic 1 2003 9 19)) 09:00-11:30 rrule daily\n" |
| 861 | "&%%(and (diary-cyclic 1 19 9 2003)) 09:00-11:30 rrule daily" | 830 | "&%%(and (diary-cyclic 1 19 9 2003)) 09:00-11:30 rrule daily\n" |
| 862 | "&%%(and (diary-cyclic 1 9 19 2003)) 09:00-11:30 rrule daily") | 831 | "&%%(and (diary-cyclic 1 9 19 2003)) 09:00-11:30 rrule daily\n") |
| 863 | ;; RRULE examples | 832 | ;; RRULE examples |
| 864 | (icalendar-tests--test-import | 833 | (icalendar-tests--test-import |
| 865 | "SUMMARY:rrule daily | 834 | "SUMMARY:rrule daily |
| @@ -867,9 +836,9 @@ DTSTART;VALUE=DATE-TIME:20030919T090000 | |||
| 867 | DTEND;VALUE=DATE-TIME:20030919T113000 | 836 | DTEND;VALUE=DATE-TIME:20030919T113000 |
| 868 | RRULE:FREQ=DAILY;INTERVAL=2 | 837 | RRULE:FREQ=DAILY;INTERVAL=2 |
| 869 | " | 838 | " |
| 870 | "&%%(and (diary-cyclic 2 2003 9 19)) 09:00-11:30 rrule daily" | 839 | "&%%(and (diary-cyclic 2 2003 9 19)) 09:00-11:30 rrule daily\n" |
| 871 | "&%%(and (diary-cyclic 2 19 9 2003)) 09:00-11:30 rrule daily" | 840 | "&%%(and (diary-cyclic 2 19 9 2003)) 09:00-11:30 rrule daily\n" |
| 872 | "&%%(and (diary-cyclic 2 9 19 2003)) 09:00-11:30 rrule daily") | 841 | "&%%(and (diary-cyclic 2 9 19 2003)) 09:00-11:30 rrule daily\n") |
| 873 | (icalendar-tests--test-import | 842 | (icalendar-tests--test-import |
| 874 | "SUMMARY:rrule daily with exceptions | 843 | "SUMMARY:rrule daily with exceptions |
| 875 | DTSTART;VALUE=DATE-TIME:20030919T090000 | 844 | DTSTART;VALUE=DATE-TIME:20030919T090000 |
| @@ -877,36 +846,36 @@ DTEND;VALUE=DATE-TIME:20030919T113000 | |||
| 877 | RRULE:FREQ=DAILY;INTERVAL=2 | 846 | RRULE:FREQ=DAILY;INTERVAL=2 |
| 878 | EXDATE:20030921,20030925 | 847 | EXDATE:20030921,20030925 |
| 879 | " | 848 | " |
| 880 | "&%%(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" | 849 | "&%%(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" |
| 881 | "&%%(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" | 850 | "&%%(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" |
| 882 | "&%%(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") | 851 | "&%%(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") |
| 883 | (icalendar-tests--test-import | 852 | (icalendar-tests--test-import |
| 884 | "SUMMARY:rrule weekly | 853 | "SUMMARY:rrule weekly |
| 885 | DTSTART;VALUE=DATE-TIME:20030919T090000 | 854 | DTSTART;VALUE=DATE-TIME:20030919T090000 |
| 886 | DTEND;VALUE=DATE-TIME:20030919T113000 | 855 | DTEND;VALUE=DATE-TIME:20030919T113000 |
| 887 | RRULE:FREQ=WEEKLY; | 856 | RRULE:FREQ=WEEKLY; |
| 888 | " | 857 | " |
| 889 | "&%%(and (diary-cyclic 7 2003 9 19)) 09:00-11:30 rrule weekly" | 858 | "&%%(and (diary-cyclic 7 2003 9 19)) 09:00-11:30 rrule weekly\n" |
| 890 | "&%%(and (diary-cyclic 7 19 9 2003)) 09:00-11:30 rrule weekly" | 859 | "&%%(and (diary-cyclic 7 19 9 2003)) 09:00-11:30 rrule weekly\n" |
| 891 | "&%%(and (diary-cyclic 7 9 19 2003)) 09:00-11:30 rrule weekly") | 860 | "&%%(and (diary-cyclic 7 9 19 2003)) 09:00-11:30 rrule weekly\n") |
| 892 | (icalendar-tests--test-import | 861 | (icalendar-tests--test-import |
| 893 | "SUMMARY:rrule monthly no end | 862 | "SUMMARY:rrule monthly no end |
| 894 | DTSTART;VALUE=DATE-TIME:20030919T090000 | 863 | DTSTART;VALUE=DATE-TIME:20030919T090000 |
| 895 | DTEND;VALUE=DATE-TIME:20030919T113000 | 864 | DTEND;VALUE=DATE-TIME:20030919T113000 |
| 896 | RRULE:FREQ=MONTHLY; | 865 | RRULE:FREQ=MONTHLY; |
| 897 | " | 866 | " |
| 898 | "&%%(and (diary-date t t 19) (diary-block 2003 9 19 9999 1 1)) 09:00-11:30 rrule monthly no end" | 867 | "&%%(and (diary-date t t 19) (diary-block 2003 9 19 9999 1 1)) 09:00-11:30 rrule monthly no end\n" |
| 899 | "&%%(and (diary-date 19 t t) (diary-block 19 9 2003 1 1 9999)) 09:00-11:30 rrule monthly no end" | 868 | "&%%(and (diary-date 19 t t) (diary-block 19 9 2003 1 1 9999)) 09:00-11:30 rrule monthly no end\n" |
| 900 | "&%%(and (diary-date t 19 t) (diary-block 9 19 2003 1 1 9999)) 09:00-11:30 rrule monthly no end") | 869 | "&%%(and (diary-date t 19 t) (diary-block 9 19 2003 1 1 9999)) 09:00-11:30 rrule monthly no end\n") |
| 901 | (icalendar-tests--test-import | 870 | (icalendar-tests--test-import |
| 902 | "SUMMARY:rrule monthly with end | 871 | "SUMMARY:rrule monthly with end |
| 903 | DTSTART;VALUE=DATE-TIME:20030919T090000 | 872 | DTSTART;VALUE=DATE-TIME:20030919T090000 |
| 904 | DTEND;VALUE=DATE-TIME:20030919T113000 | 873 | DTEND;VALUE=DATE-TIME:20030919T113000 |
| 905 | RRULE:FREQ=MONTHLY;UNTIL=20050819; | 874 | RRULE:FREQ=MONTHLY;UNTIL=20050819; |
| 906 | " | 875 | " |
| 907 | "&%%(and (diary-date t t 19) (diary-block 2003 9 19 2005 8 19)) 09:00-11:30 rrule monthly with end" | 876 | "&%%(and (diary-date t t 19) (diary-block 2003 9 19 2005 8 19)) 09:00-11:30 rrule monthly with end\n" |
| 908 | "&%%(and (diary-date 19 t t) (diary-block 19 9 2003 19 8 2005)) 09:00-11:30 rrule monthly with end" | 877 | "&%%(and (diary-date 19 t t) (diary-block 19 9 2003 19 8 2005)) 09:00-11:30 rrule monthly with end\n" |
| 909 | "&%%(and (diary-date t 19 t) (diary-block 9 19 2003 8 19 2005)) 09:00-11:30 rrule monthly with end") | 878 | "&%%(and (diary-date t 19 t) (diary-block 9 19 2003 8 19 2005)) 09:00-11:30 rrule monthly with end\n") |
| 910 | (icalendar-tests--test-import | 879 | (icalendar-tests--test-import |
| 911 | "DTSTART;VALUE=DATE:20040815 | 880 | "DTSTART;VALUE=DATE:20040815 |
| 912 | DTEND;VALUE=DATE:20040816 | 881 | DTEND;VALUE=DATE:20040816 |
| @@ -914,81 +883,81 @@ SUMMARY:Maria Himmelfahrt | |||
| 914 | UID:CC56BEA6-49D2-11D8-8833-00039386D1C2-RID | 883 | UID:CC56BEA6-49D2-11D8-8833-00039386D1C2-RID |
| 915 | RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=8 | 884 | RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=8 |
| 916 | " | 885 | " |
| 917 | "&%%(and (diary-anniversary 2004 8 15)) Maria Himmelfahrt" | 886 | "&%%(and (diary-anniversary 2004 8 15)) Maria Himmelfahrt\n" |
| 918 | "&%%(and (diary-anniversary 15 8 2004)) Maria Himmelfahrt" | 887 | "&%%(and (diary-anniversary 15 8 2004)) Maria Himmelfahrt\n" |
| 919 | "&%%(and (diary-anniversary 8 15 2004)) Maria Himmelfahrt") | 888 | "&%%(and (diary-anniversary 8 15 2004)) Maria Himmelfahrt\n") |
| 920 | (icalendar-tests--test-import | 889 | (icalendar-tests--test-import |
| 921 | "SUMMARY:rrule yearly | 890 | "SUMMARY:rrule yearly |
| 922 | DTSTART;VALUE=DATE-TIME:20030919T090000 | 891 | DTSTART;VALUE=DATE-TIME:20030919T090000 |
| 923 | DTEND;VALUE=DATE-TIME:20030919T113000 | 892 | DTEND;VALUE=DATE-TIME:20030919T113000 |
| 924 | RRULE:FREQ=YEARLY;INTERVAL=2 | 893 | RRULE:FREQ=YEARLY;INTERVAL=2 |
| 925 | " | 894 | " |
| 926 | "&%%(and (diary-anniversary 2003 9 19)) 09:00-11:30 rrule yearly" ;FIXME | 895 | "&%%(and (diary-anniversary 2003 9 19)) 09:00-11:30 rrule yearly\n" ;FIXME |
| 927 | "&%%(and (diary-anniversary 19 9 2003)) 09:00-11:30 rrule yearly" ;FIXME | 896 | "&%%(and (diary-anniversary 19 9 2003)) 09:00-11:30 rrule yearly\n" ;FIXME |
| 928 | "&%%(and (diary-anniversary 9 19 2003)) 09:00-11:30 rrule yearly") ;FIXME | 897 | "&%%(and (diary-anniversary 9 19 2003)) 09:00-11:30 rrule yearly\n") ;FIXME |
| 929 | (icalendar-tests--test-import | 898 | (icalendar-tests--test-import |
| 930 | "SUMMARY:rrule count daily short | 899 | "SUMMARY:rrule count daily short |
| 931 | DTSTART;VALUE=DATE-TIME:20030919T090000 | 900 | DTSTART;VALUE=DATE-TIME:20030919T090000 |
| 932 | DTEND;VALUE=DATE-TIME:20030919T113000 | 901 | DTEND;VALUE=DATE-TIME:20030919T113000 |
| 933 | RRULE:FREQ=DAILY;COUNT=1;INTERVAL=1 | 902 | RRULE:FREQ=DAILY;COUNT=1;INTERVAL=1 |
| 934 | " | 903 | " |
| 935 | "&%%(and (diary-cyclic 1 2003 9 19) (diary-block 2003 9 19 2003 9 19)) 09:00-11:30 rrule count daily short" | 904 | "&%%(and (diary-cyclic 1 2003 9 19) (diary-block 2003 9 19 2003 9 19)) 09:00-11:30 rrule count daily short\n" |
| 936 | "&%%(and (diary-cyclic 1 19 9 2003) (diary-block 19 9 2003 19 9 2003)) 09:00-11:30 rrule count daily short" | 905 | "&%%(and (diary-cyclic 1 19 9 2003) (diary-block 19 9 2003 19 9 2003)) 09:00-11:30 rrule count daily short\n" |
| 937 | "&%%(and (diary-cyclic 1 9 19 2003) (diary-block 9 19 2003 9 19 2003)) 09:00-11:30 rrule count daily short") | 906 | "&%%(and (diary-cyclic 1 9 19 2003) (diary-block 9 19 2003 9 19 2003)) 09:00-11:30 rrule count daily short\n") |
| 938 | (icalendar-tests--test-import | 907 | (icalendar-tests--test-import |
| 939 | "SUMMARY:rrule count daily long | 908 | "SUMMARY:rrule count daily long |
| 940 | DTSTART;VALUE=DATE-TIME:20030919T090000 | 909 | DTSTART;VALUE=DATE-TIME:20030919T090000 |
| 941 | DTEND;VALUE=DATE-TIME:20030919T113000 | 910 | DTEND;VALUE=DATE-TIME:20030919T113000 |
| 942 | RRULE:FREQ=DAILY;COUNT=14;INTERVAL=1 | 911 | RRULE:FREQ=DAILY;COUNT=14;INTERVAL=1 |
| 943 | " | 912 | " |
| 944 | "&%%(and (diary-cyclic 1 2003 9 19) (diary-block 2003 9 19 2003 10 2)) 09:00-11:30 rrule count daily long" | 913 | "&%%(and (diary-cyclic 1 2003 9 19) (diary-block 2003 9 19 2003 10 2)) 09:00-11:30 rrule count daily long\n" |
| 945 | "&%%(and (diary-cyclic 1 19 9 2003) (diary-block 19 9 2003 2 10 2003)) 09:00-11:30 rrule count daily long" | 914 | "&%%(and (diary-cyclic 1 19 9 2003) (diary-block 19 9 2003 2 10 2003)) 09:00-11:30 rrule count daily long\n" |
| 946 | "&%%(and (diary-cyclic 1 9 19 2003) (diary-block 9 19 2003 10 2 2003)) 09:00-11:30 rrule count daily long") | 915 | "&%%(and (diary-cyclic 1 9 19 2003) (diary-block 9 19 2003 10 2 2003)) 09:00-11:30 rrule count daily long\n") |
| 947 | (icalendar-tests--test-import | 916 | (icalendar-tests--test-import |
| 948 | "SUMMARY:rrule count bi-weekly 3 times | 917 | "SUMMARY:rrule count bi-weekly 3 times |
| 949 | DTSTART;VALUE=DATE-TIME:20030919T090000 | 918 | DTSTART;VALUE=DATE-TIME:20030919T090000 |
| 950 | DTEND;VALUE=DATE-TIME:20030919T113000 | 919 | DTEND;VALUE=DATE-TIME:20030919T113000 |
| 951 | RRULE:FREQ=WEEKLY;COUNT=3;INTERVAL=2 | 920 | RRULE:FREQ=WEEKLY;COUNT=3;INTERVAL=2 |
| 952 | " | 921 | " |
| 953 | "&%%(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" | 922 | "&%%(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" |
| 954 | "&%%(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" | 923 | "&%%(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" |
| 955 | "&%%(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") | 924 | "&%%(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") |
| 956 | (icalendar-tests--test-import | 925 | (icalendar-tests--test-import |
| 957 | "SUMMARY:rrule count monthly | 926 | "SUMMARY:rrule count monthly |
| 958 | DTSTART;VALUE=DATE-TIME:20030919T090000 | 927 | DTSTART;VALUE=DATE-TIME:20030919T090000 |
| 959 | DTEND;VALUE=DATE-TIME:20030919T113000 | 928 | DTEND;VALUE=DATE-TIME:20030919T113000 |
| 960 | RRULE:FREQ=MONTHLY;INTERVAL=1;COUNT=5 | 929 | RRULE:FREQ=MONTHLY;INTERVAL=1;COUNT=5 |
| 961 | " | 930 | " |
| 962 | "&%%(and (diary-date t t 19) (diary-block 2003 9 19 2004 1 19)) 09:00-11:30 rrule count monthly" | 931 | "&%%(and (diary-date t t 19) (diary-block 2003 9 19 2004 1 19)) 09:00-11:30 rrule count monthly\n" |
| 963 | "&%%(and (diary-date 19 t t) (diary-block 19 9 2003 19 1 2004)) 09:00-11:30 rrule count monthly" | 932 | "&%%(and (diary-date 19 t t) (diary-block 19 9 2003 19 1 2004)) 09:00-11:30 rrule count monthly\n" |
| 964 | "&%%(and (diary-date t 19 t) (diary-block 9 19 2003 1 19 2004)) 09:00-11:30 rrule count monthly") | 933 | "&%%(and (diary-date t 19 t) (diary-block 9 19 2003 1 19 2004)) 09:00-11:30 rrule count monthly\n") |
| 965 | (icalendar-tests--test-import | 934 | (icalendar-tests--test-import |
| 966 | "SUMMARY:rrule count every second month | 935 | "SUMMARY:rrule count every second month |
| 967 | DTSTART;VALUE=DATE-TIME:20030919T090000 | 936 | DTSTART;VALUE=DATE-TIME:20030919T090000 |
| 968 | DTEND;VALUE=DATE-TIME:20030919T113000 | 937 | DTEND;VALUE=DATE-TIME:20030919T113000 |
| 969 | RRULE:FREQ=MONTHLY;INTERVAL=2;COUNT=5 | 938 | RRULE:FREQ=MONTHLY;INTERVAL=2;COUNT=5 |
| 970 | " | 939 | " |
| 971 | "&%%(and (diary-date t t 19) (diary-block 2003 9 19 2004 5 19)) 09:00-11:30 rrule count every second month" ;FIXME | 940 | "&%%(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 |
| 972 | "&%%(and (diary-date 19 t t) (diary-block 19 9 2003 19 5 2004)) 09:00-11:30 rrule count every second month" ;FIXME | 941 | "&%%(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 |
| 973 | "&%%(and (diary-date t 19 t) (diary-block 9 19 2003 5 19 2004)) 09:00-11:30 rrule count every second month") ;FIXME | 942 | "&%%(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 |
| 974 | (icalendar-tests--test-import | 943 | (icalendar-tests--test-import |
| 975 | "SUMMARY:rrule count yearly | 944 | "SUMMARY:rrule count yearly |
| 976 | DTSTART;VALUE=DATE-TIME:20030919T090000 | 945 | DTSTART;VALUE=DATE-TIME:20030919T090000 |
| 977 | DTEND;VALUE=DATE-TIME:20030919T113000 | 946 | DTEND;VALUE=DATE-TIME:20030919T113000 |
| 978 | RRULE:FREQ=YEARLY;INTERVAL=1;COUNT=5 | 947 | RRULE:FREQ=YEARLY;INTERVAL=1;COUNT=5 |
| 979 | " | 948 | " |
| 980 | "&%%(and (diary-date t 9 19) (diary-block 2003 9 19 2007 9 19)) 09:00-11:30 rrule count yearly" | 949 | "&%%(and (diary-date t 9 19) (diary-block 2003 9 19 2007 9 19)) 09:00-11:30 rrule count yearly\n" |
| 981 | "&%%(and (diary-date 19 9 t) (diary-block 19 9 2003 19 9 2007)) 09:00-11:30 rrule count yearly" | 950 | "&%%(and (diary-date 19 9 t) (diary-block 19 9 2003 19 9 2007)) 09:00-11:30 rrule count yearly\n" |
| 982 | "&%%(and (diary-date 9 19 t) (diary-block 9 19 2003 9 19 2007)) 09:00-11:30 rrule count yearly") | 951 | "&%%(and (diary-date 9 19 t) (diary-block 9 19 2003 9 19 2007)) 09:00-11:30 rrule count yearly\n") |
| 983 | (icalendar-tests--test-import | 952 | (icalendar-tests--test-import |
| 984 | "SUMMARY:rrule count every second year | 953 | "SUMMARY:rrule count every second year |
| 985 | DTSTART;VALUE=DATE-TIME:20030919T090000 | 954 | DTSTART;VALUE=DATE-TIME:20030919T090000 |
| 986 | DTEND;VALUE=DATE-TIME:20030919T113000 | 955 | DTEND;VALUE=DATE-TIME:20030919T113000 |
| 987 | RRULE:FREQ=YEARLY;INTERVAL=2;COUNT=5 | 956 | RRULE:FREQ=YEARLY;INTERVAL=2;COUNT=5 |
| 988 | " | 957 | " |
| 989 | "&%%(and (diary-date t 9 19) (diary-block 2003 9 19 2011 9 19)) 09:00-11:30 rrule count every second year" ;FIXME!!! | 958 | "&%%(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!!! |
| 990 | "&%%(and (diary-date 19 9 t) (diary-block 19 9 2003 19 9 2011)) 09:00-11:30 rrule count every second year" ;FIXME!!! | 959 | "&%%(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!!! |
| 991 | "&%%(and (diary-date 9 19 t) (diary-block 9 19 2003 9 19 2011)) 09:00-11:30 rrule count every second year") ;FIXME!!! | 960 | "&%%(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!!! |
| 992 | ) | 961 | ) |
| 993 | 962 | ||
| 994 | (ert-deftest icalendar-import-duration () | 963 | (ert-deftest icalendar-import-duration () |
| @@ -998,9 +967,9 @@ RRULE:FREQ=YEARLY;INTERVAL=2;COUNT=5 | |||
| 998 | SUMMARY:duration | 967 | SUMMARY:duration |
| 999 | DURATION:P7D | 968 | DURATION:P7D |
| 1000 | " | 969 | " |
| 1001 | "&%%(and (diary-block 2005 2 17 2005 2 23)) duration" | 970 | "&%%(and (diary-block 2005 2 17 2005 2 23)) duration\n" |
| 1002 | "&%%(and (diary-block 17 2 2005 23 2 2005)) duration" | 971 | "&%%(and (diary-block 17 2 2005 23 2 2005)) duration\n" |
| 1003 | "&%%(and (diary-block 2 17 2005 2 23 2005)) duration") | 972 | "&%%(and (diary-block 2 17 2005 2 23 2005)) duration\n") |
| 1004 | (icalendar-tests--test-import | 973 | (icalendar-tests--test-import |
| 1005 | "UID:20041127T183329Z-18215-1001-4536-49109@andromeda | 974 | "UID:20041127T183329Z-18215-1001-4536-49109@andromeda |
| 1006 | DTSTAMP:20041127T183315Z | 975 | DTSTAMP:20041127T183315Z |
| @@ -1014,11 +983,11 @@ SEQUENCE:1 | |||
| 1014 | CREATED:20041127T183329 | 983 | CREATED:20041127T183329 |
| 1015 | " | 984 | " |
| 1016 | "&%%(and (diary-cyclic 1 2001 12 21) (diary-block 2001 12 21 2001 12 29)) Urlaub | 985 | "&%%(and (diary-cyclic 1 2001 12 21) (diary-block 2001 12 21 2001 12 29)) Urlaub |
| 1017 | Class: PUBLIC" | 986 | Class: PUBLIC\n" |
| 1018 | "&%%(and (diary-cyclic 1 21 12 2001) (diary-block 21 12 2001 29 12 2001)) Urlaub | 987 | "&%%(and (diary-cyclic 1 21 12 2001) (diary-block 21 12 2001 29 12 2001)) Urlaub |
| 1019 | Class: PUBLIC" | 988 | Class: PUBLIC\n" |
| 1020 | "&%%(and (diary-cyclic 1 12 21 2001) (diary-block 12 21 2001 12 29 2001)) Urlaub | 989 | "&%%(and (diary-cyclic 1 12 21 2001) (diary-block 12 21 2001 12 29 2001)) Urlaub |
| 1021 | Class: PUBLIC")) | 990 | Class: PUBLIC\n")) |
| 1022 | 991 | ||
| 1023 | (ert-deftest icalendar-import-bug-6766 () | 992 | (ert-deftest icalendar-import-bug-6766 () |
| 1024 | ;;bug#6766 -- multiple byday values in a weekly rrule | 993 | ;;bug#6766 -- multiple byday values in a weekly rrule |
| @@ -1049,20 +1018,62 @@ UID:8814e3f9-7482-408f-996c-3bfe486a1263 | |||
| 1049 | Status: CONFIRMED | 1018 | Status: CONFIRMED |
| 1050 | Class: PUBLIC | 1019 | Class: PUBLIC |
| 1051 | &%%(and (memq (calendar-day-of-week date) '(2 4)) (diary-cyclic 1 2010 4 22)) Tues + Thurs thinking | 1020 | &%%(and (memq (calendar-day-of-week date) '(2 4)) (diary-cyclic 1 2010 4 22)) Tues + Thurs thinking |
| 1052 | Class: PUBLIC" | 1021 | Class: PUBLIC |
| 1053 | 1022 | " | |
| 1054 | "&%%(and (memq (calendar-day-of-week date) '(1 3 4 5)) (diary-cyclic 1 21 4 2010)) 11:30-12:00 Scrum | 1023 | "&%%(and (memq (calendar-day-of-week date) '(1 3 4 5)) (diary-cyclic 1 21 4 2010)) 11:30-12:00 Scrum |
| 1055 | Status: CONFIRMED | 1024 | Status: CONFIRMED |
| 1056 | Class: PUBLIC | 1025 | Class: PUBLIC |
| 1057 | &%%(and (memq (calendar-day-of-week date) '(2 4)) (diary-cyclic 1 22 4 2010)) Tues + Thurs thinking | 1026 | &%%(and (memq (calendar-day-of-week date) '(2 4)) (diary-cyclic 1 22 4 2010)) Tues + Thurs thinking |
| 1058 | Class: PUBLIC" | 1027 | Class: PUBLIC |
| 1059 | 1028 | " | |
| 1060 | "&%%(and (memq (calendar-day-of-week date) '(1 3 4 5)) (diary-cyclic 1 4 21 2010)) 11:30-12:00 Scrum | 1029 | "&%%(and (memq (calendar-day-of-week date) '(1 3 4 5)) (diary-cyclic 1 4 21 2010)) 11:30-12:00 Scrum |
| 1061 | Status: CONFIRMED | 1030 | Status: CONFIRMED |
| 1062 | Class: PUBLIC | 1031 | Class: PUBLIC |
| 1063 | &%%(and (memq (calendar-day-of-week date) '(2 4)) (diary-cyclic 1 4 22 2010)) Tues + Thurs thinking | 1032 | &%%(and (memq (calendar-day-of-week date) '(2 4)) (diary-cyclic 1 4 22 2010)) Tues + Thurs thinking |
| 1064 | Class: PUBLIC")) | 1033 | Class: PUBLIC |
| 1034 | ")) | ||
| 1065 | 1035 | ||
| 1036 | (ert-deftest icalendar-import-multiple-vcalendars () | ||
| 1037 | (icalendar-tests--test-import | ||
| 1038 | "DTSTART;VALUE=DATE:20110723 | ||
| 1039 | SUMMARY:event-1 | ||
| 1040 | " | ||
| 1041 | "&2011/7/23 event-1\n" | ||
| 1042 | "&23/7/2011 event-1\n" | ||
| 1043 | "&7/23/2011 event-1\n") | ||
| 1044 | |||
| 1045 | (icalendar-tests--test-import | ||
| 1046 | "BEGIN:VCALENDAR | ||
| 1047 | PRODID:-//Emacs//NONSGML icalendar.el//EN | ||
| 1048 | VERSION:2.0\nBEGIN:VEVENT | ||
| 1049 | DTSTART;VALUE=DATE:20110723 | ||
| 1050 | SUMMARY:event-1 | ||
| 1051 | END:VEVENT | ||
| 1052 | END:VCALENDAR | ||
| 1053 | BEGIN:VCALENDAR | ||
| 1054 | PRODID:-//Emacs//NONSGML icalendar.el//EN | ||
| 1055 | VERSION:2.0 | ||
| 1056 | BEGIN:VEVENT | ||
| 1057 | DTSTART;VALUE=DATE:20110724 | ||
| 1058 | SUMMARY:event-2 | ||
| 1059 | END:VEVENT | ||
| 1060 | END:VCALENDAR | ||
| 1061 | BEGIN:VCALENDAR | ||
| 1062 | PRODID:-//Emacs//NONSGML icalendar.el//EN | ||
| 1063 | VERSION:2.0 | ||
| 1064 | BEGIN:VEVENT | ||
| 1065 | DTSTART;VALUE=DATE:20110725 | ||
| 1066 | SUMMARY:event-3a | ||
| 1067 | END:VEVENT | ||
| 1068 | BEGIN:VEVENT | ||
| 1069 | DTSTART;VALUE=DATE:20110725 | ||
| 1070 | SUMMARY:event-3b | ||
| 1071 | END:VEVENT | ||
| 1072 | END:VCALENDAR | ||
| 1073 | " | ||
| 1074 | "&2011/7/23 event-1\n&2011/7/24 event-2\n&2011/7/25 event-3a\n&2011/7/25 event-3b\n" | ||
| 1075 | "&23/7/2011 event-1\n&24/7/2011 event-2\n&25/7/2011 event-3a\n&25/7/2011 event-3b\n" | ||
| 1076 | "&7/23/2011 event-1\n&7/24/2011 event-2\n&7/25/2011 event-3a\n&7/25/2011 event-3b\n")) | ||
| 1066 | 1077 | ||
| 1067 | ;; ====================================================================== | 1078 | ;; ====================================================================== |
| 1068 | ;; Cycle | 1079 | ;; Cycle |
| @@ -1113,7 +1124,7 @@ Argument INPUT icalendar event string." | |||
| 1113 | (when (re-search-forward "\nUID:.*\n" nil t) | 1124 | (when (re-search-forward "\nUID:.*\n" nil t) |
| 1114 | (replace-match "\n")) | 1125 | (replace-match "\n")) |
| 1115 | (let ((cycled (buffer-substring-no-properties (point-min) (point-max)))) | 1126 | (let ((cycled (buffer-substring-no-properties (point-min) (point-max)))) |
| 1116 | (should (icalendar-tests--compare-strings cycled org-input))))) | 1127 | (should (string= org-input cycled))))) |
| 1117 | ;; clean up | 1128 | ;; clean up |
| 1118 | (kill-buffer (find-buffer-visiting temp-diary)) | 1129 | (kill-buffer (find-buffer-visiting temp-diary)) |
| 1119 | (save-excursion | 1130 | (save-excursion |
| @@ -1211,12 +1222,14 @@ END:VCALENDAR" | |||
| 1211 | Desc: 10:30am - Blah | 1222 | Desc: 10:30am - Blah |
| 1212 | Location: Cccc | 1223 | Location: Cccc |
| 1213 | Organizer: MAILTO:aaaaaaa@aaaaaaa.com | 1224 | Organizer: MAILTO:aaaaaaa@aaaaaaa.com |
| 1214 | Status: CONFIRMED" | 1225 | Status: CONFIRMED |
| 1226 | " | ||
| 1215 | "&5/9/2003 10:30-15:30 On-Site Interview | 1227 | "&5/9/2003 10:30-15:30 On-Site Interview |
| 1216 | Desc: 10:30am - Blah | 1228 | Desc: 10:30am - Blah |
| 1217 | Location: Cccc | 1229 | Location: Cccc |
| 1218 | Organizer: MAILTO:aaaaaaa@aaaaaaa.com | 1230 | Organizer: MAILTO:aaaaaaa@aaaaaaa.com |
| 1219 | Status: CONFIRMED") | 1231 | Status: CONFIRMED |
| 1232 | ") | ||
| 1220 | 1233 | ||
| 1221 | ;; 2003-06-18 a | 1234 | ;; 2003-06-18 a |
| 1222 | (icalendar-tests--test-import | 1235 | (icalendar-tests--test-import |
| @@ -1255,12 +1268,14 @@ END:VALARM" | |||
| 1255 | Desc: 753 Zeichen hier radiert | 1268 | Desc: 753 Zeichen hier radiert |
| 1256 | Location: 555 or TN 555-5555 ID 5555 & NochWas (see below) | 1269 | Location: 555 or TN 555-5555 ID 5555 & NochWas (see below) |
| 1257 | Organizer: MAILTO:xxx@xxxxx.com | 1270 | Organizer: MAILTO:xxx@xxxxx.com |
| 1258 | Status: CONFIRMED" | 1271 | Status: CONFIRMED |
| 1272 | " | ||
| 1259 | "&6/23/2003 11:00-12:00 Dress Rehearsal for XXXX-XXXX | 1273 | "&6/23/2003 11:00-12:00 Dress Rehearsal for XXXX-XXXX |
| 1260 | Desc: 753 Zeichen hier radiert | 1274 | Desc: 753 Zeichen hier radiert |
| 1261 | Location: 555 or TN 555-5555 ID 5555 & NochWas (see below) | 1275 | Location: 555 or TN 555-5555 ID 5555 & NochWas (see below) |
| 1262 | Organizer: MAILTO:xxx@xxxxx.com | 1276 | Organizer: MAILTO:xxx@xxxxx.com |
| 1263 | Status: CONFIRMED") | 1277 | Status: CONFIRMED |
| 1278 | ") | ||
| 1264 | ;; 2003-06-18 b -- uses timezone | 1279 | ;; 2003-06-18 b -- uses timezone |
| 1265 | (icalendar-tests--test-import | 1280 | (icalendar-tests--test-import |
| 1266 | "BEGIN:VCALENDAR | 1281 | "BEGIN:VCALENDAR |
| @@ -1323,12 +1338,14 @@ END:VCALENDAR" | |||
| 1323 | Desc: Viele Zeichen standen hier früher | 1338 | Desc: Viele Zeichen standen hier früher |
| 1324 | Location: 123 or TN 123-1234 ID abcd & SonstWo (see below) | 1339 | Location: 123 or TN 123-1234 ID abcd & SonstWo (see below) |
| 1325 | Organizer: MAILTO:bbb@bbbbb.com | 1340 | Organizer: MAILTO:bbb@bbbbb.com |
| 1326 | Status: CONFIRMED" | 1341 | Status: CONFIRMED |
| 1342 | " | ||
| 1327 | "&6/23/2003 17:00-18:00 Updated: Dress Rehearsal for ABC01-15 | 1343 | "&6/23/2003 17:00-18:00 Updated: Dress Rehearsal for ABC01-15 |
| 1328 | Desc: Viele Zeichen standen hier früher | 1344 | Desc: Viele Zeichen standen hier früher |
| 1329 | Location: 123 or TN 123-1234 ID abcd & SonstWo (see below) | 1345 | Location: 123 or TN 123-1234 ID abcd & SonstWo (see below) |
| 1330 | Organizer: MAILTO:bbb@bbbbb.com | 1346 | Organizer: MAILTO:bbb@bbbbb.com |
| 1331 | Status: CONFIRMED") | 1347 | Status: CONFIRMED |
| 1348 | ") | ||
| 1332 | ;; export 2004-10-28 block entries | 1349 | ;; export 2004-10-28 block entries |
| 1333 | (icalendar-tests--test-export | 1350 | (icalendar-tests--test-export |
| 1334 | nil | 1351 | nil |
| @@ -1697,7 +1714,8 @@ END:VCALENDAR | |||
| 1697 | Class: PRIVATE | 1714 | Class: PRIVATE |
| 1698 | &%%(and (diary-cyclic 7 1 11 2004)) Wwww aa hhhh | 1715 | &%%(and (diary-cyclic 7 1 11 2004)) Wwww aa hhhh |
| 1699 | Status: TENTATIVE | 1716 | Status: TENTATIVE |
| 1700 | Class: PRIVATE" | 1717 | Class: PRIVATE |
| 1718 | " | ||
| 1701 | "&11/23/2004 14:00-14:30 Jjjjj & Wwwww | 1719 | "&11/23/2004 14:00-14:30 Jjjjj & Wwwww |
| 1702 | Status: TENTATIVE | 1720 | Status: TENTATIVE |
| 1703 | Class: PRIVATE | 1721 | Class: PRIVATE |
| @@ -1716,7 +1734,8 @@ END:VCALENDAR | |||
| 1716 | Class: PRIVATE | 1734 | Class: PRIVATE |
| 1717 | &%%(and (diary-cyclic 7 11 1 2004)) Wwww aa hhhh | 1735 | &%%(and (diary-cyclic 7 11 1 2004)) Wwww aa hhhh |
| 1718 | Status: TENTATIVE | 1736 | Status: TENTATIVE |
| 1719 | Class: PRIVATE") | 1737 | Class: PRIVATE |
| 1738 | ") | ||
| 1720 | 1739 | ||
| 1721 | ;; 2004-09-09 pg | 1740 | ;; 2004-09-09 pg |
| 1722 | (icalendar-tests--test-export | 1741 | (icalendar-tests--test-export |
| @@ -1771,11 +1790,13 @@ DTSTAMP | |||
| 1771 | "&%%(and (diary-block 6 2 2005 6 2 2005)) Waitangi Day | 1790 | "&%%(and (diary-block 6 2 2005 6 2 2005)) Waitangi Day |
| 1772 | Desc: abcdef | 1791 | Desc: abcdef |
| 1773 | Status: CONFIRMED | 1792 | Status: CONFIRMED |
| 1774 | Class: PRIVATE" | 1793 | Class: PRIVATE |
| 1794 | " | ||
| 1775 | "&%%(and (diary-block 2 6 2005 2 6 2005)) Waitangi Day | 1795 | "&%%(and (diary-block 2 6 2005 2 6 2005)) Waitangi Day |
| 1776 | Desc: abcdef | 1796 | Desc: abcdef |
| 1777 | Status: CONFIRMED | 1797 | Status: CONFIRMED |
| 1778 | Class: PRIVATE") | 1798 | Class: PRIVATE |
| 1799 | ") | ||
| 1779 | 1800 | ||
| 1780 | ;; 2005-03-01 lt | 1801 | ;; 2005-03-01 lt |
| 1781 | (icalendar-tests--test-import | 1802 | (icalendar-tests--test-import |
| @@ -1785,8 +1806,8 @@ UID:6AFA7558-6994-11D9-8A3A-000A95A0E830-RID | |||
| 1785 | DTSTAMP:20050118T210335Z | 1806 | DTSTAMP:20050118T210335Z |
| 1786 | DURATION:P7D" | 1807 | DURATION:P7D" |
| 1787 | nil | 1808 | nil |
| 1788 | "&%%(and (diary-block 17 2 2005 23 2 2005)) Hhhhhh Aaaaa ii Aaaaaaaa" | 1809 | "&%%(and (diary-block 17 2 2005 23 2 2005)) Hhhhhh Aaaaa ii Aaaaaaaa\n" |
| 1789 | "&%%(and (diary-block 2 17 2005 2 23 2005)) Hhhhhh Aaaaa ii Aaaaaaaa") | 1810 | "&%%(and (diary-block 2 17 2005 2 23 2005)) Hhhhhh Aaaaa ii Aaaaaaaa\n") |
| 1790 | 1811 | ||
| 1791 | ;; 2005-03-23 lt | 1812 | ;; 2005-03-23 lt |
| 1792 | (icalendar-tests--test-export | 1813 | (icalendar-tests--test-export |