Screenshot instructions:
Windows
Mac
Red Hat Linux
Ubuntu
Click URL instructions:
Right-click on ad, choose "Copy Link", then paste here →
(This may not be possible with some types of ads)
You can subscribe to this list here.
2007 |
Jan
|
Feb
|
Mar
(23) |
Apr
(254) |
May
(252) |
Jun
(209) |
Jul
(198) |
Aug
(192) |
Sep
(207) |
Oct
(120) |
Nov
(179) |
Dec
(52) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2008 |
Jan
(48) |
Feb
(69) |
Mar
(129) |
Apr
(250) |
May
(113) |
Jun
(177) |
Jul
(228) |
Aug
(155) |
Sep
(218) |
Oct
(185) |
Nov
(109) |
Dec
(88) |
2009 |
Jan
(83) |
Feb
(39) |
Mar
(70) |
Apr
(47) |
May
(48) |
Jun
(67) |
Jul
(61) |
Aug
(97) |
Sep
(221) |
Oct
(141) |
Nov
(70) |
Dec
(61) |
2010 |
Jan
(45) |
Feb
(76) |
Mar
(178) |
Apr
(106) |
May
(57) |
Jun
(32) |
Jul
(64) |
Aug
(98) |
Sep
(96) |
Oct
(19) |
Nov
(34) |
Dec
(117) |
2011 |
Jan
(55) |
Feb
(48) |
Mar
(64) |
Apr
(21) |
May
(39) |
Jun
(53) |
Jul
(99) |
Aug
(56) |
Sep
(39) |
Oct
(26) |
Nov
(19) |
Dec
(69) |
2012 |
Jan
(17) |
Feb
(40) |
Mar
(17) |
Apr
|
May
(2) |
Jun
(8) |
Jul
(2) |
Aug
(10) |
Sep
(10) |
Oct
(38) |
Nov
(48) |
Dec
(70) |
2013 |
Jan
(43) |
Feb
(47) |
Mar
(39) |
Apr
(37) |
May
(25) |
Jun
(6) |
Jul
(20) |
Aug
(49) |
Sep
(33) |
Oct
(34) |
Nov
(75) |
Dec
(6) |
2014 |
Jan
(32) |
Feb
(10) |
Mar
(17) |
Apr
|
May
|
Jun
(26) |
Jul
(5) |
Aug
|
Sep
(4) |
Oct
(23) |
Nov
(80) |
Dec
(48) |
2015 |
Jan
(80) |
Feb
(50) |
Mar
(58) |
Apr
(20) |
May
(11) |
Jun
(16) |
Jul
(24) |
Aug
(27) |
Sep
(56) |
Oct
(30) |
Nov
(16) |
Dec
(6) |
2016 |
Jan
(31) |
Feb
(14) |
Mar
(23) |
Apr
(17) |
May
(40) |
Jun
(12) |
Jul
(17) |
Aug
(9) |
Sep
(32) |
Oct
(36) |
Nov
(23) |
Dec
(9) |
2017 |
Jan
(37) |
Feb
(23) |
Mar
(65) |
Apr
(22) |
May
(6) |
Jun
(3) |
Jul
|
Aug
|
Sep
(3) |
Oct
(22) |
Nov
(63) |
Dec
(71) |
2018 |
Jan
(83) |
Feb
(21) |
Mar
(35) |
Apr
(37) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
|
|
|
|
|
|
1
|
2
(3) |
3
|
4
|
5
(1) |
6
|
7
(2) |
8
(3) |
9
|
10
(2) |
11
|
12
(1) |
13
(1) |
14
(1) |
15
|
16
|
17
|
18
|
19
|
20
(4) |
21
|
22
|
23
|
24
(2) |
25
(3) |
26
|
27
|
28
(2) |
29
|
30
(1) |
31
|
|
|
|
|
|
From: <hofman@us...> - 2011-10-30 10:59:06
|
Revision: 7529 http://skim-app.svn.sourceforge.net/skim-app/?rev=7529&view=rev Author: hofman Date: 2011-10-30 10:58:59 +0000 (Sun, 30 Oct 2011) Log Message: ----------- use empty string as default value, equivalent to using the key Modified Paths: -------------- trunk/SKLocalization.m Modified: trunk/SKLocalization.m =================================================================== --- trunk/SKLocalization.m 2011-10-28 11:20:26 UTC (rev 7528) +++ trunk/SKLocalization.m 2011-10-30 10:58:59 UTC (rev 7529) @@ -42,7 +42,7 @@ if ([string length] == 0) return nil; // we may want to check for missing localized strings when DEBUG - return [[NSBundle mainBundle] localizedStringForKey:string value:string table:table]; + return [[NSBundle mainBundle] localizedStringForKey:string value:@"" table:table]; } #define LOCALIZE_PROPERTY_FROM_TABLE(property, table) \ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hofman@us...> - 2011-10-28 11:20:32
|
Revision: 7528 http://skim-app.svn.sourceforge.net/skim-app/?rev=7528&view=rev Author: hofman Date: 2011-10-28 11:20:26 +0000 (Fri, 28 Oct 2011) Log Message: ----------- use array kvc methods for subtemplates Modified Paths: -------------- trunk/SKTemplateParser.m trunk/SKTemplateTag.h trunk/SKTemplateTag.m Modified: trunk/SKTemplateParser.m =================================================================== --- trunk/SKTemplateParser.m 2011-10-28 11:15:55 UTC (rev 7527) +++ trunk/SKTemplateParser.m 2011-10-28 11:20:26 UTC (rev 7528) @@ -470,12 +470,12 @@ if ([matchString hasPrefix:@"$"]) matchString = [templateValueForKeyPath(object, [matchString substringFromIndex:1], anIndex) templateStringValue] ?: @""; if (matchesCondition(keyValue, matchString, [tag matchType])) { - subtemplate = [tag subtemplateAtIndex:i]; + subtemplate = [tag objectInSubtemplatesAtIndex:i]; break; } } - if (subtemplate == nil && [[tag subtemplates] count] > count) - subtemplate = [tag subtemplateAtIndex:count]; + if (subtemplate == nil && [tag countOfSubtemplates] > count) + subtemplate = [tag objectInSubtemplatesAtIndex:count]; if (subtemplate != nil) { if ((keyValue = [self stringFromTemplateArray:subtemplate usingObject:object atIndex:anIndex])) [result appendString:keyValue]; @@ -729,12 +729,12 @@ if ([matchString hasPrefix:@"$"]) matchString = [templateValueForKeyPath(object, [matchString substringFromIndex:1], anIndex) templateStringValue] ?: @""; if (matchesCondition(keyValue, matchString, [tag matchType])) { - subtemplate = [tag subtemplateAtIndex:i]; + subtemplate = [tag objectInSubtemplatesAtIndex:i]; break; } } - if (subtemplate == nil && [[tag subtemplates] count] > count) - subtemplate = [tag subtemplateAtIndex:count]; + if (subtemplate == nil && [tag countOfSubtemplates] > count) + subtemplate = [tag objectInSubtemplatesAtIndex:count]; if (subtemplate != nil) { if ((tmpAttrStr = [self attributedStringFromTemplateArray:subtemplate usingObject:object atIndex:anIndex])) [result appendAttributedString:tmpAttrStr]; Modified: trunk/SKTemplateTag.h =================================================================== --- trunk/SKTemplateTag.h 2011-10-28 11:15:55 UTC (rev 7527) +++ trunk/SKTemplateTag.h 2011-10-28 11:20:26 UTC (rev 7528) @@ -127,9 +127,9 @@ @property (nonatomic, readonly) SKTemplateTagMatchType matchType; @property (nonatomic, readonly) NSArray *matchStrings; -@... (nonatomic, readonly) NSArray *subtemplates; -- (NSArray *)subtemplateAtIndex:(NSUInteger)index; +- (NSUInteger)countOfSubtemplates; +- (NSArray *)objectInSubtemplatesAtIndex:(NSUInteger)anIndex; @end Modified: trunk/SKTemplateTag.m =================================================================== --- trunk/SKTemplateTag.m 2011-10-28 11:15:55 UTC (rev 7527) +++ trunk/SKTemplateTag.m 2011-10-28 11:20:26 UTC (rev 7528) @@ -178,7 +178,7 @@ @implementation SKConditionTemplateTag -@... matchType, matchStrings, subtemplates; +@synthesize matchType, matchStrings; - (id)initWithKeyPath:(NSString *)aKeyPath matchType:(SKTemplateTagMatchType)aMatchType matchStrings:(NSArray *)aMatchStrings subtemplates:(NSArray *)aSubtemplates { self = [super initWithKeyPath:aKeyPath]; @@ -198,7 +198,11 @@ - (SKTemplateTagType)type { return SKConditionTemplateTagType; } -- (NSArray *)subtemplateAtIndex:(NSUInteger)anIndex { +- (NSUInteger)countOfSubtemplates { + return [subtemplates count]; +} + +- (NSArray *)objectInSubtemplatesAtIndex:(NSUInteger)anIndex { id subtemplate = [subtemplates objectAtIndex:anIndex]; if ([subtemplate isKindOfClass:[NSArray class]] == NO) { subtemplate = [SKTemplateParser arrayByParsingTemplateString:subtemplate isSubtemplate:YES]; @@ -213,7 +217,7 @@ @implementation SKRichConditionTemplateTag -- (NSArray *)subtemplateAtIndex:(NSUInteger)anIndex { +- (NSArray *)objectInSubtemplatesAtIndex:(NSUInteger)anIndex { id subtemplate = [subtemplates objectAtIndex:anIndex]; if ([subtemplate isKindOfClass:[NSArray class]] == NO) { subtemplate = [SKTemplateParser arrayByParsingTemplateAttributedString:subtemplate isSubtemplate:YES]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hofman@us...> - 2011-10-28 11:16:01
|
Revision: 7527 http://skim-app.svn.sourceforge.net/skim-app/?rev=7527&view=rev Author: hofman Date: 2011-10-28 11:15:55 +0000 (Fri, 28 Oct 2011) Log Message: ----------- use properties Modified Paths: -------------- trunk/SKTemplateTag.h trunk/SKTemplateTag.m Modified: trunk/SKTemplateTag.h =================================================================== --- trunk/SKTemplateTag.h 2011-10-25 17:02:27 UTC (rev 7526) +++ trunk/SKTemplateTag.h 2011-10-28 11:15:55 UTC (rev 7527) @@ -55,9 +55,10 @@ }; typedef NSInteger SKTemplateTagMatchType; -@... SKTemplateTag : NSObject { -} -- (SKTemplateTagType)type; +@interface SKTemplateTag : NSObject + +@property (nonatomic, readonly) SKTemplateTagType type; + @end #pragma mark - @@ -68,7 +69,7 @@ - (id)initWithKeyPath:(NSString *)aKeyPath; -- (NSString *)keyPath; +@property (nonatomic, readonly) NSString *keyPath; @end @@ -80,7 +81,7 @@ - (id)initWithKeyPath:(NSString *)aKeyPath attributes:(NSDictionary *)anAttributes; -- (NSDictionary *)attributes; +@property (nonatomic, readonly) NSDictionary *attributes; @end @@ -95,8 +96,7 @@ - (id)initWithKeyPath:(NSString *)aKeyPath itemTemplateString:(NSString *)anItemTemplateString separatorTemplateString:(NSString *)aSeparatorTemplateString; -- (NSArray *)itemTemplate; -- (NSArray *)separatorTemplate; +@property (nonatomic, readonly) NSArray *itemTemplate, *separatorTemplate; @end @@ -111,8 +111,7 @@ - (id)initWithKeyPath:(NSString *)aKeyPath itemTemplateAttributedString:(NSAttributedString *)anItemTemplateAttributedString separatorTemplateAttributedString:(NSAttributedString *)aSeparatorTemplateAttributedString; -- (NSArray *)itemTemplate; -- (NSArray *)separatorTemplate; +@property (nonatomic, readonly) NSArray *itemTemplate, *separatorTemplate; @end @@ -126,9 +125,10 @@ - (id)initWithKeyPath:(NSString *)aKeyPath matchType:(SKTemplateTagMatchType)aMatchType matchStrings:(NSArray *)aMatchStrings subtemplates:(NSArray *)aSubtemplates; -- (SKTemplateTagMatchType)matchType; -- (NSArray *)matchStrings; -- (NSArray *)subtemplates; +@property (nonatomic, readonly) SKTemplateTagMatchType matchType; +@property (nonatomic, readonly) NSArray *matchStrings; +@property (nonatomic, readonly) NSArray *subtemplates; + - (NSArray *)subtemplateAtIndex:(NSUInteger)index; @end @@ -146,8 +146,7 @@ - (id)initWithText:(NSString *)aText; -- (NSString *)text; -- (void)setText:(NSString *)newText; +@property (nonatomic, retain) NSString *text; - (void)appendText:(NSString *)newText; @@ -161,8 +160,7 @@ - (id)initWithAttributedText:(NSAttributedString *)anAttributedText; -- (NSAttributedString *)attributedText; -- (void)setAttributedText:(NSAttributedString *)newAttributedText; +@property (nonatomic, retain) NSAttributedString *attributedText; - (void)appendAttributedText:(NSAttributedString *)newAttributedText; Modified: trunk/SKTemplateTag.m =================================================================== --- trunk/SKTemplateTag.m 2011-10-25 17:02:27 UTC (rev 7526) +++ trunk/SKTemplateTag.m 2011-10-28 11:15:55 UTC (rev 7527) @@ -41,13 +41,19 @@ @implementation SKTemplateTag + +@dynamic type; + - (SKTemplateTagType)type { return -1; } + @end #pragma mark - @implementation SKValueTemplateTag +@synthesize keyPath; + - (id)initWithKeyPath:(NSString *)aKeyPath { self = [super init]; if (self) { @@ -63,16 +69,14 @@ - (SKTemplateTagType)type { return SKValueTemplateTagType; } -- (NSString *)keyPath { - return keyPath; -} - @end #pragma mark - @implementation SKRichValueTemplateTag +@synthesize attributes; + - (id)initWithKeyPath:(NSString *)aKeyPath attributes:(NSDictionary *)anAttributes { self = [super initWithKeyPath:aKeyPath]; if (self) { @@ -86,16 +90,14 @@ [super dealloc]; } -- (NSDictionary *)attributes { - return attributes; -} - @end #pragma mark - @implementation SKCollectionTemplateTag +@dynamic itemTemplate, separatorTemplate; + - (id)initWithKeyPath:(NSString *)aKeyPath itemTemplateString:(NSString *)anItemTemplateString separatorTemplateString:(NSString *)aSeparatorTemplateString { self = [super initWithKeyPath:aKeyPath]; if (self) { @@ -135,6 +137,8 @@ @implementation SKRichCollectionTemplateTag +@dynamic itemTemplate, separatorTemplate; + - (id)initWithKeyPath:(NSString *)aKeyPath itemTemplateAttributedString:(NSAttributedString *)anItemTemplateAttributedString separatorTemplateAttributedString:(NSAttributedString *)aSeparatorTemplateAttributedString { self = [super initWithKeyPath:aKeyPath]; if (self) { @@ -174,6 +178,8 @@ @implementation SKConditionTemplateTag +@synthesize matchType, matchStrings, subtemplates; + - (id)initWithKeyPath:(NSString *)aKeyPath matchType:(SKTemplateTagMatchType)aMatchType matchStrings:(NSArray *)aMatchStrings subtemplates:(NSArray *)aSubtemplates { self = [super initWithKeyPath:aKeyPath]; if (self) { @@ -192,18 +198,6 @@ - (SKTemplateTagType)type { return SKConditionTemplateTagType; } -- (SKTemplateTagMatchType)matchType { - return matchType; -} - -- (NSArray *)subtemplates { - return subtemplates; -} - -- (NSArray *)matchStrings { - return matchStrings; -} - - (NSArray *)subtemplateAtIndex:(NSUInteger)anIndex { id subtemplate = [subtemplates objectAtIndex:anIndex]; if ([subtemplate isKindOfClass:[NSArray class]] == NO) { @@ -234,6 +228,8 @@ @implementation SKTextTemplateTag +@synthesize text; + - (id)initWithText:(NSString *)aText { self = [super init]; if (self) { @@ -249,17 +245,6 @@ - (SKTemplateTagType)type { return SKTextTemplateTagType; } -- (NSString *)text { - return text; -} - -- (void)setText:(NSString *)newText { - if (text != newText) { - [text release]; - text = [newText retain]; - } -} - - (void)appendText:(NSString *)newText { [self setText:[text stringByAppendingString:newText]]; } @@ -270,6 +255,8 @@ @implementation SKRichTextTemplateTag +@synthesize attributedText; + - (id)initWithAttributedText:(NSAttributedString *)anAttributedText { self = [super init]; if (self) { @@ -285,17 +272,6 @@ - (SKTemplateTagType)type { return SKTextTemplateTagType; } -- (NSAttributedString *)attributedText { - return attributedText; -} - -- (void)setAttributedText:(NSAttributedString *)newAttributedText { - if (attributedText != newAttributedText) { - [attributedText release]; - attributedText = [newAttributedText retain]; - } -} - - (void)appendAttributedText:(NSAttributedString *)newAttributedText { NSMutableAttributedString *newAttrText = [attributedText mutableCopy]; [newAttrText appendAttributedString:newAttributedText]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hofman@us...> - 2011-10-25 17:02:33
|
Revision: 7526 http://skim-app.svn.sourceforge.net/skim-app/?rev=7526&view=rev Author: hofman Date: 2011-10-25 17:02:27 +0000 (Tue, 25 Oct 2011) Log Message: ----------- combine code Modified Paths: -------------- trunk/SKPDFView.m Modified: trunk/SKPDFView.m =================================================================== --- trunk/SKPDFView.m 2011-10-25 10:55:59 UTC (rev 7525) +++ trunk/SKPDFView.m 2011-10-25 17:02:27 UTC (rev 7526) @@ -3299,34 +3299,32 @@ newActiveAnnotation = nil; mouseDownInAnnotation = YES; } else if ((modifiers & NSShiftKeyMask) && activeAnnotation != newActiveAnnotation && [[activeAnnotation page] isEqual:[newActiveAnnotation page]] && [[activeAnnotation type] isEqualToString:[newActiveAnnotation type]]) { + PDFAnnotation *newAnnotation = nil; if ([activeAnnotation isMarkup]) { NSInteger markupType = [(PDFAnnotationMarkup *)activeAnnotation markupType]; PDFSelection *sel = [(PDFAnnotationMarkup *)activeAnnotation selection]; [sel addSelection:[(PDFAnnotationMarkup *)newActiveAnnotation selection]]; - [self removeAnnotation:newActiveAnnotation]; - newActiveAnnotation = [[[PDFAnnotationMarkup alloc] initSkimNoteWithSelection:sel markupType:markupType] autorelease]; - [newActiveAnnotation setString:[sel cleanedString]]; - [newActiveAnnotation setColor:[activeAnnotation color]]; - [newActiveAnnotation registerUserName]; - [self removeActiveAnnotation:nil]; - [self addAnnotation:newActiveAnnotation toPage:page]; - [[self documentUndoManager] setActionName:NSLocalizedString(@"Join Notes", @"Undo action name")]; + newAnnotation = [[[PDFAnnotationMarkup alloc] initSkimNoteWithSelection:sel markupType:markupType] autorelease]; + [newAnnotation setString:[sel cleanedString]]; } else if ([[activeAnnotation type] isEqualToString:SKNInkString]) { NSMutableArray *paths = [[(PDFAnnotationInk *)activeAnnotation pagePaths] mutableCopy]; [paths addObjectsFromArray:[(PDFAnnotationInk *)newActiveAnnotation pagePaths]]; + newAnnotation = [[[PDFAnnotationInk alloc] initSkimNoteWithPaths:paths] autorelease]; + [newAnnotation setString:[activeAnnotation string]]; + [newAnnotation setBorder:[activeAnnotation border]]; + + [paths release]; + } + if (newAnnotation) { + [newAnnotation setColor:[activeAnnotation color]]; + [newAnnotation registerUserName]; [self removeAnnotation:newActiveAnnotation]; - newActiveAnnotation = [[[PDFAnnotationInk alloc] initSkimNoteWithPaths:paths] autorelease]; - [newActiveAnnotation setString:[activeAnnotation string]]; - [newActiveAnnotation setColor:[activeAnnotation color]]; - [newActiveAnnotation setBorder:[activeAnnotation border]]; - [newActiveAnnotation registerUserName]; [self removeActiveAnnotation:nil]; - [self addAnnotation:newActiveAnnotation toPage:page]; + [self addAnnotation:newAnnotation toPage:page]; [[self documentUndoManager] setActionName:NSLocalizedString(@"Join Notes", @"Undo action name")]; - - [paths release]; + newActiveAnnotation = newAnnotation; } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hofman@us...> - 2011-10-25 10:56:09
|
Revision: 7525 http://skim-app.svn.sourceforge.net/skim-app/?rev=7525&view=rev Author: hofman Date: 2011-10-25 10:55:59 +0000 (Tue, 25 Oct 2011) Log Message: ----------- get device description once Modified Paths: -------------- trunk/PDFView_SKExtensions.m Modified: trunk/PDFView_SKExtensions.m =================================================================== --- trunk/PDFView_SKExtensions.m 2011-10-25 10:26:50 UTC (rev 7524) +++ trunk/PDFView_SKExtensions.m 2011-10-25 10:55:59 UTC (rev 7525) @@ -46,9 +46,10 @@ static inline CGFloat physicalScaleFactorForView(NSView *view) { NSScreen *screen = [[view window] screen]; - CGDirectDisplayID displayID = (CGDirectDisplayID)[[[screen deviceDescription] objectForKey:@"NSScreenNumber"] unsignedIntValue]; + NSDictionary *deviceDescription = [screen deviceDescription]; + CGDirectDisplayID displayID = (CGDirectDisplayID)[[deviceDescription objectForKey:@"NSScreenNumber"] unsignedIntValue]; CGSize physicalSize = CGDisplayScreenSize(displayID); - NSSize resolution = [[[screen deviceDescription] objectForKey:NSDeviceResolution] sizeValue]; + NSSize resolution = [[deviceDescription objectForKey:NSDeviceResolution] sizeValue]; return CGSizeEqualToSize(physicalSize, CGSizeZero) ? 1.0 : (physicalSize.width * resolution.width) / (CGDisplayPixelsWide(displayID) * 25.4f); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hofman@us...> - 2011-10-25 10:26:56
|
Revision: 7524 http://skim-app.svn.sourceforge.net/skim-app/?rev=7524&view=rev Author: hofman Date: 2011-10-25 10:26:50 +0000 (Tue, 25 Oct 2011) Log Message: ----------- remove duplicate method implementation Modified Paths: -------------- trunk/SKPDFView.m Modified: trunk/SKPDFView.m =================================================================== --- trunk/SKPDFView.m 2011-10-24 22:29:16 UTC (rev 7523) +++ trunk/SKPDFView.m 2011-10-25 10:26:50 UTC (rev 7524) @@ -969,29 +969,6 @@ isZooming = NO; } -- (CGFloat)physicalScaleFactor { - CGFloat scale = [self scaleFactor]; - NSScreen *screen = [[self window] screen]; - CGDirectDisplayID displayID = (CGDirectDisplayID)[[[screen deviceDescription] objectForKey:@"NSScreenNumber"] unsignedIntValue]; - CGSize physicalSize = CGDisplayScreenSize(displayID); - NSSize resolution = [[[screen deviceDescription] objectForKey:NSDeviceResolution] sizeValue]; - - if (CGSizeEqualToSize(physicalSize, CGSizeZero) == NO) - scale *= (physicalSize.width * resolution.width) / (CGDisplayPixelsWide(displayID) * 25.4f); - return scale; -} - -- (void)setPhysicalScaleFactor:(CGFloat)scale { - NSScreen *screen = [[self window] screen]; - CGDirectDisplayID displayID = (CGDirectDisplayID)[[[screen deviceDescription] objectForKey:@"NSScreenNumber"] unsignedIntValue]; - CGSize physicalSize = CGDisplayScreenSize(displayID); - NSSize resolution = [[[screen deviceDescription] objectForKey:NSDeviceResolution] sizeValue]; - - if (CGSizeEqualToSize(physicalSize, CGSizeZero) == NO) - scale *= CGDisplayPixelsWide(displayID) * 25.4f / (physicalSize.width * resolution.width); - [self setScaleFactor:scale]; -} - // we don't want to steal the printDocument: action from the responder chain - (void)printDocument:(id)sender{} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hofman@us...> - 2011-10-24 22:29:22
|
Revision: 7523 http://skim-app.svn.sourceforge.net/skim-app/?rev=7523&view=rev Author: hofman Date: 2011-10-24 22:29:16 +0000 (Mon, 24 Oct 2011) Log Message: ----------- separate code for physical scale factor Modified Paths: -------------- trunk/PDFView_SKExtensions.m Modified: trunk/PDFView_SKExtensions.m =================================================================== --- trunk/PDFView_SKExtensions.m 2011-10-24 17:11:05 UTC (rev 7522) +++ trunk/PDFView_SKExtensions.m 2011-10-24 22:29:16 UTC (rev 7523) @@ -44,27 +44,20 @@ @dynamic physicalScaleFactor, scrollView; -- (CGFloat)physicalScaleFactor { - CGFloat scale = [self scaleFactor]; - NSScreen *screen = [[self window] screen]; +static inline CGFloat physicalScaleFactorForView(NSView *view) { + NSScreen *screen = [[view window] screen]; CGDirectDisplayID displayID = (CGDirectDisplayID)[[[screen deviceDescription] objectForKey:@"NSScreenNumber"] unsignedIntValue]; CGSize physicalSize = CGDisplayScreenSize(displayID); NSSize resolution = [[[screen deviceDescription] objectForKey:NSDeviceResolution] sizeValue]; - - if (CGSizeEqualToSize(physicalSize, CGSizeZero) == NO) - scale *= (physicalSize.width * resolution.width) / (CGDisplayPixelsWide(displayID) * 25.4f); - return scale; + return CGSizeEqualToSize(physicalSize, CGSizeZero) ? 1.0 : (physicalSize.width * resolution.width) / (CGDisplayPixelsWide(displayID) * 25.4f); } +- (CGFloat)physicalScaleFactor { + return [self scaleFactor] * physicalScaleFactorForView(self); +} + - (void)setPhysicalScaleFactor:(CGFloat)scale { - NSScreen *screen = [[self window] screen]; - CGDirectDisplayID displayID = (CGDirectDisplayID)[[[screen deviceDescription] objectForKey:@"NSScreenNumber"] unsignedIntValue]; - CGSize physicalSize = CGDisplayScreenSize(displayID); - NSSize resolution = [[[screen deviceDescription] objectForKey:NSDeviceResolution] sizeValue]; - - if (CGSizeEqualToSize(physicalSize, CGSizeZero) == NO) - scale *= CGDisplayPixelsWide(displayID) * 25.4f / (physicalSize.width * resolution.width); - [self setScaleFactor:scale]; + [self setScaleFactor:scale / physicalScaleFactorForView(self)]; } - (NSScrollView *)scrollView { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hofman@us...> - 2011-10-24 17:11:15
|
Revision: 7522 http://skim-app.svn.sourceforge.net/skim-app/?rev=7522&view=rev Author: hofman Date: 2011-10-24 17:11:05 +0000 (Mon, 24 Oct 2011) Log Message: ----------- local variable for modifier flags Modified Paths: -------------- trunk/SKPDFView.m Modified: trunk/SKPDFView.m =================================================================== --- trunk/SKPDFView.m 2011-10-20 22:12:24 UTC (rev 7521) +++ trunk/SKPDFView.m 2011-10-24 17:11:05 UTC (rev 7522) @@ -3295,8 +3295,8 @@ } if (hideNotes == NO && page != nil) { - BOOL isShift = 0 != ([theEvent modifierFlags] & NSShiftKeyMask); - if (([theEvent modifierFlags] & NSAlternateKeyMask) && [newActiveAnnotation isMovable]) { + NSUInteger modifiers = [theEvent modifierFlags]; + if ((modifiers & NSAlternateKeyMask) && [newActiveAnnotation isMovable]) { // select a new copy of the annotation PDFAnnotation *newAnnotation = [[PDFAnnotation alloc] initSkimNoteWithProperties:[newActiveAnnotation SkimNoteProperties]]; [newAnnotation registerUserName]; @@ -3316,12 +3316,12 @@ mouseDownInAnnotation = YES; } } else if (([newActiveAnnotation isMarkup] || - (isInk && newActiveAnnotation && (newActiveAnnotation != activeAnnotation || ([theEvent modifierFlags] & (NSShiftKeyMask | NSAlphaShiftKeyMask))))) && + (isInk && newActiveAnnotation && (newActiveAnnotation != activeAnnotation || (modifiers & (NSShiftKeyMask | NSAlphaShiftKeyMask))))) && NSLeftMouseDragged == [[NSApp nextEventMatchingMask:(NSLeftMouseUpMask | NSLeftMouseDraggedMask) untilDate:[NSDate distantFuture] inMode:NSEventTrackingRunLoopMode dequeue:NO] type]) { // don't drag markup notes or in freehand tool mode, unless the note was previously selected, so we can select text or draw freehand strokes newActiveAnnotation = nil; mouseDownInAnnotation = YES; - } else if (isShift && activeAnnotation != newActiveAnnotation && [[activeAnnotation page] isEqual:[newActiveAnnotation page]] && [[activeAnnotation type] isEqualToString:[newActiveAnnotation type]]) { + } else if ((modifiers & NSShiftKeyMask) && activeAnnotation != newActiveAnnotation && [[activeAnnotation page] isEqual:[newActiveAnnotation page]] && [[activeAnnotation type] isEqualToString:[newActiveAnnotation type]]) { if ([activeAnnotation isMarkup]) { NSInteger markupType = [(PDFAnnotationMarkup *)activeAnnotation markupType]; PDFSelection *sel = [(PDFAnnotationMarkup *)activeAnnotation selection]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hofman@us...> - 2011-10-20 22:12:30
|
Revision: 7521 http://skim-app.svn.sourceforge.net/skim-app/?rev=7521&view=rev Author: hofman Date: 2011-10-20 22:12:24 +0000 (Thu, 20 Oct 2011) Log Message: ----------- add shadow to selected freehand notes so we can see which strokes are included Modified Paths: -------------- trunk/PDFAnnotationInk_SKExtensions.m trunk/PDFAnnotation_SKExtensions.h trunk/PDFAnnotation_SKExtensions.m trunk/SKPDFView.m Modified: trunk/PDFAnnotationInk_SKExtensions.m =================================================================== --- trunk/PDFAnnotationInk_SKExtensions.m 2011-10-20 09:36:32 UTC (rev 7520) +++ trunk/PDFAnnotationInk_SKExtensions.m 2011-10-20 22:12:24 UTC (rev 7521) @@ -45,11 +45,32 @@ #import "NSGeometry_SKExtensions.h" #import "NSData_SKExtensions.h" #import "NSBezierPath_SKExtensions.h" +#import "SKRuntime.h" NSString *SKPDFAnnotationScriptingPointListsKey = @"scriptingPointLists"; @implementation PDFAnnotationInk (SKExtensions) +static void (*original_drawWithBox)(id, SEL, PDFDisplayBox) = NULL; + +- (void)replacement_drawWithBox:(PDFDisplayBox)box { + if ([PDFAnnotation currentActiveAnnotation] == self) { + [NSGraphicsContext saveGraphicsState]; + NSShadow *shade = [[[NSShadow alloc] init] autorelease]; + [shade setShadowBlurRadius:2.0]; + [shade setShadowOffset:NSMakeSize(0.0, -2.0)]; + [shade set]; + original_drawWithBox(self, _cmd, box); + [NSGraphicsContext restoreGraphicsState]; + } else { + original_drawWithBox(self, _cmd, box); + } +} + ++ (void)load { + original_drawWithBox = (void (*)(id, SEL, PDFDisplayBox))SKReplaceInstanceMethodImplementationFromSelector(self, @selector(drawWithBox:), @selector(replacement_drawWithBox:)); +} + - (id)initSkimNoteWithBounds:(NSRect)bounds { self = [super initSkimNoteWithBounds:bounds]; if (self) { Modified: trunk/PDFAnnotation_SKExtensions.h =================================================================== --- trunk/PDFAnnotation_SKExtensions.h 2011-10-20 09:36:32 UTC (rev 7520) +++ trunk/PDFAnnotation_SKExtensions.h 2011-10-20 22:12:24 UTC (rev 7521) @@ -45,9 +45,13 @@ extern NSString *SKPDFAnnotationScriptingModificationDateKey; extern NSString *SKPDFAnnotationScriptingUserNameKey; +@class SKPDFView; @interface PDFAnnotation (SKExtensions) ++ (PDFAnnotation *)currentActiveAnnotation; ++ (void)setCurrentActiveAnnotation:(PDFAnnotation *)annotation; + - (NSString *)fdfString; - (PDFDestination *)destination; Modified: trunk/PDFAnnotation_SKExtensions.m =================================================================== --- trunk/PDFAnnotation_SKExtensions.m 2011-10-20 09:36:32 UTC (rev 7520) +++ trunk/PDFAnnotation_SKExtensions.m 2011-10-20 22:12:24 UTC (rev 7521) @@ -70,6 +70,19 @@ @implementation PDFAnnotation (SKExtensions) +static PDFAnnotation *currentActiveAnnotation = nil; + ++ (PDFAnnotation *)currentActiveAnnotation { + return currentActiveAnnotation; +} + ++ (void)setCurrentActiveAnnotation:(PDFAnnotation *)annotation { + if (currentActiveAnnotation != annotation) { + [currentActiveAnnotation release]; + currentActiveAnnotation = [annotation retain]; + } +} + - (NSString *)fdfString { NSMutableString *fdfString = [NSMutableString string]; NSRect bounds = [self bounds]; Modified: trunk/SKPDFView.m =================================================================== --- trunk/SKPDFView.m 2011-10-20 09:36:32 UTC (rev 7520) +++ trunk/SKPDFView.m 2011-10-20 22:12:24 UTC (rev 7521) @@ -345,13 +345,23 @@ interpolation = NSImageInterpolationHigh; [[NSGraphicsContext currentContext] setImageInterpolation:interpolation]; + [PDFAnnotation setCurrentActiveAnnotation:activeAnnotation]; + // Let PDFView do most of the hard work. [super drawPage: pdfPage]; + + [PDFAnnotation setCurrentActiveAnnotation:nil]; [pdfPage transformContextForBox:[self displayBox]]; if (bezierPath && pathPageIndex == [pdfPage pageIndex]) { [NSGraphicsContext saveGraphicsState]; + if ([[activeAnnotation type] isEqualToString:SKNInkString]) { + NSShadow *shade = [[[NSShadow alloc] init] autorelease]; + [shade setShadowBlurRadius:2.0]; + [shade setShadowOffset:NSMakeSize(0.0, -2.0)]; + [shade set]; + } [pathColor setStroke]; [bezierPath stroke]; [NSGraphicsContext restoreGraphicsState]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hofman@us...> - 2011-10-20 09:36:39
|
Revision: 7520 http://skim-app.svn.sourceforge.net/skim-app/?rev=7520&view=rev Author: hofman Date: 2011-10-20 09:36:32 +0000 (Thu, 20 Oct 2011) Log Message: ----------- move some methods to a separate file Modified Paths: -------------- trunk/NSGeometry_SKExtensions.h trunk/NSGeometry_SKExtensions.m trunk/PDFAnnotationLine_SKExtensions.m trunk/PDFAnnotation_SKExtensions.m trunk/SKConversionProgressController.m trunk/SKDisplayPreferences.m trunk/SKDownloadPreferenceController.m trunk/SKFindController.m trunk/SKGeneralPreferences.m trunk/SKLineInspector.m trunk/SKNoteTypeSheetController.m trunk/SKNoteWindowController.m trunk/SKNotesPreferences.m trunk/SKPDFView.m trunk/SKPreferenceController.m trunk/SKPresentationOptionsSheetController.m trunk/SKSyncPreferences.m trunk/SKTextFieldSheetController.m trunk/Skim.xcodeproj/project.pbxproj Added Paths: ----------- trunk/NSGraphics_SKExtensions.h trunk/NSGraphics_SKExtensions.m Modified: trunk/NSGeometry_SKExtensions.h =================================================================== --- trunk/NSGeometry_SKExtensions.h 2011-10-20 09:21:06 UTC (rev 7519) +++ trunk/NSGeometry_SKExtensions.h 2011-10-20 09:36:32 UTC (rev 7520) @@ -180,14 +180,3 @@ nsPoint.y = (CGFloat)qdPoint.v; return nsPoint; } - -#pragma mark - - -extern void SKDrawGrabHandle(NSPoint point, CGFloat radius, BOOL active); -extern void SKDrawGrabHandles(NSRect rect, CGFloat radius, NSInteger mask); - -#pragma mark - - -extern void SKShiftAndResizeViews(NSArray *views, CGFloat dx, CGFloat dw); -extern void SKAutoSizeButtons(NSArray *buttons, BOOL rightAlign); -extern CGFloat SKAutoSizeLabelFields(NSArray *labelFields, NSArray *controls, BOOL resizeControls); Modified: trunk/NSGeometry_SKExtensions.m =================================================================== --- trunk/NSGeometry_SKExtensions.m 2011-10-20 09:21:06 UTC (rev 7519) +++ trunk/NSGeometry_SKExtensions.m 2011-10-20 09:36:32 UTC (rev 7520) @@ -109,91 +109,3 @@ return extProduct * extProduct < lineDelta * lineDelta * ( relPoint.x * relPoint.x + relPoint.y * relPoint.y ); } - -#pragma mark - - -void SKDrawGrabHandle(NSPoint point, CGFloat radius, BOOL active) -{ - NSBezierPath *path = [NSBezierPath bezierPathWithOvalInRect:NSMakeRect(point.x - 0.875 * radius, point.y - 0.875 * radius, 1.75 * radius, 1.75 * radius)]; - [path setLineWidth:0.25 * radius]; - [[NSColor colorWithCalibratedRed:0.737118 green:0.837339 blue:0.983108 alpha:active ? 1.0 : 0.8] setFill]; - [[NSColor colorWithCalibratedRed:0.278477 green:0.467857 blue:0.810941 alpha:active ? 1.0 : 0.8] setStroke]; - [path fill]; - [path stroke]; -} - -void SKDrawGrabHandles(NSRect rect, CGFloat radius, NSInteger mask) -{ - SKDrawGrabHandle(NSMakePoint(NSMinX(rect), NSMidY(rect)), radius, mask == SKMinXEdgeMask); - SKDrawGrabHandle(NSMakePoint(NSMaxX(rect), NSMidY(rect)), radius, mask == SKMaxXEdgeMask); - SKDrawGrabHandle(NSMakePoint(NSMidX(rect), NSMaxY(rect)), radius, mask == SKMaxYEdgeMask); - SKDrawGrabHandle(NSMakePoint(NSMidX(rect), NSMinY(rect)), radius, mask == SKMinYEdgeMask); - SKDrawGrabHandle(NSMakePoint(NSMinX(rect), NSMaxY(rect)), radius, mask == (SKMinXEdgeMask | SKMaxYEdgeMask)); - SKDrawGrabHandle(NSMakePoint(NSMinX(rect), NSMinY(rect)), radius, mask == (SKMinXEdgeMask | SKMinYEdgeMask)); - SKDrawGrabHandle(NSMakePoint(NSMaxX(rect), NSMaxY(rect)), radius, mask == (SKMaxXEdgeMask | SKMaxYEdgeMask)); - SKDrawGrabHandle(NSMakePoint(NSMaxX(rect), NSMinY(rect)), radius, mask == (SKMaxXEdgeMask | SKMinYEdgeMask)); -} - -#pragma mark - - -#define MIN_BUTTON_WIDTH 82.0 -#define MAX_BUTTON_WIDTH 100.0 -#define EXTRA_BUTTON_WIDTH 12.0 - -void SKShiftAndResizeViews(NSArray *views, CGFloat dx, CGFloat dw) { - for (NSView *view in views) { - NSRect frame = [view frame]; - frame.origin.x += dx; - frame.size.width += dw; - [view setFrame:frame]; - } -} - -void SKAutoSizeButtons(NSArray *buttons, BOOL rightAlign) { - if ([buttons count] == 0) - return; - NSButton *button = [buttons objectAtIndex:0]; - CGFloat x = rightAlign ? NSMaxX([button frame]) : NSMinX([button frame]); - CGFloat width = 0.0; - for (button in buttons) { - [button sizeToFit]; - width = fmax(width, NSWidth([button frame]) + EXTRA_BUTTON_WIDTH); - } - width = fmin(MAX_BUTTON_WIDTH, fmax(MIN_BUTTON_WIDTH, width)); - for (button in buttons) { - NSRect frame = [button frame]; - frame.size.width = fmax(width, NSWidth(frame) + EXTRA_BUTTON_WIDTH); - if (rightAlign) { - x -= NSWidth(frame); - frame.origin.x = x; - } else { - frame.origin.x = x; - x += NSWidth(frame); - } - [button setFrame:frame]; - } -} - -CGFloat SKAutoSizeLabelFields(NSArray *labelFields, NSArray *controls, BOOL resizeControls) { - if ([labelFields count] == 0) - return 0.0; - NSControl *control; - NSRect frame; - CGFloat left = CGFLOAT_MAX, width = 0.0, right, dw = -NSMaxX([[labelFields lastObject] frame]); - for (control in labelFields) { - [control sizeToFit]; - frame = [control frame]; - left = fmin(left, NSMinX(frame)); - width = fmax(width, NSWidth(frame)); - } - right = left + width; - for (control in labelFields) { - frame = [control frame]; - frame.origin.x = right - NSWidth(frame); - [control setFrame:frame]; - } - dw += right; - SKShiftAndResizeViews(controls, dw, resizeControls ? -dw : 0.0); - return dw; -} - Added: trunk/NSGraphics_SKExtensions.h =================================================================== --- trunk/NSGraphics_SKExtensions.h (rev 0) +++ trunk/NSGraphics_SKExtensions.h 2011-10-20 09:36:32 UTC (rev 7520) @@ -0,0 +1,49 @@ +// +// NSGraphics_SKExtensions.h +// Skim +// +// Created by Christiaan Hofman on 10/20/11. +/* + This software is Copyright (c) 2011 + Christiaan Hofman. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + - Neither the name of Christiaan Hofman nor the names of any + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#import <Cocoa/Cocoa.h> + + +extern void SKDrawGrabHandle(NSPoint point, CGFloat radius, BOOL active); +extern void SKDrawGrabHandles(NSRect rect, CGFloat radius, NSInteger mask); + +#pragma mark - + +extern void SKShiftAndResizeViews(NSArray *views, CGFloat dx, CGFloat dw); +extern void SKAutoSizeButtons(NSArray *buttons, BOOL rightAlign); +extern CGFloat SKAutoSizeLabelFields(NSArray *labelFields, NSArray *controls, BOOL resizeControls); Added: trunk/NSGraphics_SKExtensions.m =================================================================== --- trunk/NSGraphics_SKExtensions.m (rev 0) +++ trunk/NSGraphics_SKExtensions.m 2011-10-20 09:36:32 UTC (rev 7520) @@ -0,0 +1,127 @@ +// +// NSGraphics_SKExtensions.m +// Skim +// +// Created by Christiaan Hofman on 10/20/11. +/* + This software is Copyright (c) 2011 + Christiaan Hofman. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + - Neither the name of Christiaan Hofman nor the names of any + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#import "NSGraphics_SKExtensions.h" +#import "NSGeometry_SKExtensions.h" + + +void SKDrawGrabHandle(NSPoint point, CGFloat radius, BOOL active) +{ + NSBezierPath *path = [NSBezierPath bezierPathWithOvalInRect:NSMakeRect(point.x - 0.875 * radius, point.y - 0.875 * radius, 1.75 * radius, 1.75 * radius)]; + [path setLineWidth:0.25 * radius]; + [[NSColor colorWithCalibratedRed:0.737118 green:0.837339 blue:0.983108 alpha:active ? 1.0 : 0.8] setFill]; + [[NSColor colorWithCalibratedRed:0.278477 green:0.467857 blue:0.810941 alpha:active ? 1.0 : 0.8] setStroke]; + [path fill]; + [path stroke]; +} + +void SKDrawGrabHandles(NSRect rect, CGFloat radius, NSInteger mask) +{ + SKDrawGrabHandle(NSMakePoint(NSMinX(rect), NSMidY(rect)), radius, mask == SKMinXEdgeMask); + SKDrawGrabHandle(NSMakePoint(NSMaxX(rect), NSMidY(rect)), radius, mask == SKMaxXEdgeMask); + SKDrawGrabHandle(NSMakePoint(NSMidX(rect), NSMaxY(rect)), radius, mask == SKMaxYEdgeMask); + SKDrawGrabHandle(NSMakePoint(NSMidX(rect), NSMinY(rect)), radius, mask == SKMinYEdgeMask); + SKDrawGrabHandle(NSMakePoint(NSMinX(rect), NSMaxY(rect)), radius, mask == (SKMinXEdgeMask | SKMaxYEdgeMask)); + SKDrawGrabHandle(NSMakePoint(NSMinX(rect), NSMinY(rect)), radius, mask == (SKMinXEdgeMask | SKMinYEdgeMask)); + SKDrawGrabHandle(NSMakePoint(NSMaxX(rect), NSMaxY(rect)), radius, mask == (SKMaxXEdgeMask | SKMaxYEdgeMask)); + SKDrawGrabHandle(NSMakePoint(NSMaxX(rect), NSMinY(rect)), radius, mask == (SKMaxXEdgeMask | SKMinYEdgeMask)); +} + +#pragma mark - + +#define MIN_BUTTON_WIDTH 82.0 +#define MAX_BUTTON_WIDTH 100.0 +#define EXTRA_BUTTON_WIDTH 12.0 + +void SKShiftAndResizeViews(NSArray *views, CGFloat dx, CGFloat dw) { + for (NSView *view in views) { + NSRect frame = [view frame]; + frame.origin.x += dx; + frame.size.width += dw; + [view setFrame:frame]; + } +} + +void SKAutoSizeButtons(NSArray *buttons, BOOL rightAlign) { + if ([buttons count] == 0) + return; + NSButton *button = [buttons objectAtIndex:0]; + CGFloat x = rightAlign ? NSMaxX([button frame]) : NSMinX([button frame]); + CGFloat width = 0.0; + for (button in buttons) { + [button sizeToFit]; + width = fmax(width, NSWidth([button frame]) + EXTRA_BUTTON_WIDTH); + } + width = fmin(MAX_BUTTON_WIDTH, fmax(MIN_BUTTON_WIDTH, width)); + for (button in buttons) { + NSRect frame = [button frame]; + frame.size.width = fmax(width, NSWidth(frame) + EXTRA_BUTTON_WIDTH); + if (rightAlign) { + x -= NSWidth(frame); + frame.origin.x = x; + } else { + frame.origin.x = x; + x += NSWidth(frame); + } + [button setFrame:frame]; + } +} + +CGFloat SKAutoSizeLabelFields(NSArray *labelFields, NSArray *controls, BOOL resizeControls) { + if ([labelFields count] == 0) + return 0.0; + NSControl *control; + NSRect frame; + CGFloat left = CGFLOAT_MAX, width = 0.0, right, dw = -NSMaxX([[labelFields lastObject] frame]); + for (control in labelFields) { + [control sizeToFit]; + frame = [control frame]; + left = fmin(left, NSMinX(frame)); + width = fmax(width, NSWidth(frame)); + } + right = left + width; + for (control in labelFields) { + frame = [control frame]; + frame.origin.x = right - NSWidth(frame); + [control setFrame:frame]; + } + dw += right; + SKShiftAndResizeViews(controls, dw, resizeControls ? -dw : 0.0); + return dw; +} + Modified: trunk/PDFAnnotationLine_SKExtensions.m =================================================================== --- trunk/PDFAnnotationLine_SKExtensions.m 2011-10-20 09:21:06 UTC (rev 7519) +++ trunk/PDFAnnotationLine_SKExtensions.m 2011-10-20 09:36:32 UTC (rev 7520) @@ -44,6 +44,7 @@ #import "SKFDFParser.h" #import "NSUserDefaults_SKExtensions.h" #import "NSGeometry_SKExtensions.h" +#import "NSGraphics_SKExtensions.h" #import "NSData_SKExtensions.h" Modified: trunk/PDFAnnotation_SKExtensions.m =================================================================== --- trunk/PDFAnnotation_SKExtensions.m 2011-10-20 09:21:06 UTC (rev 7519) +++ trunk/PDFAnnotation_SKExtensions.m 2011-10-20 09:36:32 UTC (rev 7520) @@ -52,6 +52,7 @@ #import "PDFSelection_SKExtensions.h" #import "SKPDFView.h" #import "NSGeometry_SKExtensions.h" +#import "NSGraphics_SKExtensions.h" #import "NSData_SKExtensions.h" #import "NSString_SKExtensions.h" #import "NSBezierPath_SKExtensions.h" Modified: trunk/SKConversionProgressController.m =================================================================== --- trunk/SKConversionProgressController.m 2011-10-20 09:21:06 UTC (rev 7519) +++ trunk/SKConversionProgressController.m 2011-10-20 09:36:32 UTC (rev 7520) @@ -44,7 +44,7 @@ #import "NSInvocation_SKExtensions.h" #import "SKDocumentController.h" #import <libkern/OSAtomic.h> -#import "NSGeometry_SKExtensions.h" +#import "NSGraphics_SKExtensions.h" #import "NSDocument_SKExtensions.h" #import "NSError_SKExtensions.h" Modified: trunk/SKDisplayPreferences.m =================================================================== --- trunk/SKDisplayPreferences.m 2011-10-20 09:21:06 UTC (rev 7519) +++ trunk/SKDisplayPreferences.m 2011-10-20 09:36:32 UTC (rev 7520) @@ -39,7 +39,7 @@ #import "SKDisplayPreferences.h" #import "SKPreferenceController.h" #import "SKStringConstants.h" -#import "NSGeometry_SKExtensions.h" +#import "NSGraphics_SKExtensions.h" static CGFloat SKDefaultFontSizes[] = {8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 16.0, 18.0, 20.0, 24.0, 28.0, 32.0, 48.0, 64.0}; Modified: trunk/SKDownloadPreferenceController.m =================================================================== --- trunk/SKDownloadPreferenceController.m 2011-10-20 09:21:06 UTC (rev 7519) +++ trunk/SKDownloadPreferenceController.m 2011-10-20 09:36:32 UTC (rev 7520) @@ -37,7 +37,7 @@ */ #import "SKDownloadPreferenceController.h" -#import "NSGeometry_SKExtensions.h" +#import "NSGraphics_SKExtensions.h" #import "NSMenu_SKExtensions.h" #import "SKStringConstants.h" Modified: trunk/SKFindController.m =================================================================== --- trunk/SKFindController.m 2011-10-20 09:21:06 UTC (rev 7519) +++ trunk/SKFindController.m 2011-10-20 09:36:32 UTC (rev 7520) @@ -41,6 +41,7 @@ #import "SKStringConstants.h" #import "SKGradientView.h" #import "NSGeometry_SKExtensions.h" +#import "NSGraphics_SKExtensions.h" #import "NSSegmentedControl_SKExtensions.h" #import "NSMenu_SKExtensions.h" Modified: trunk/SKGeneralPreferences.m =================================================================== --- trunk/SKGeneralPreferences.m 2011-10-20 09:21:06 UTC (rev 7519) +++ trunk/SKGeneralPreferences.m 2011-10-20 09:36:32 UTC (rev 7520) @@ -41,7 +41,7 @@ #import "SKStringConstants.h" #import "NSUserDefaultsController_SKExtensions.h" #import <Sparkle/Sparkle.h> -#import "NSGeometry_SKExtensions.h" +#import "NSGraphics_SKExtensions.h" #define UPDATEINTERVAL_KEY @"updateInterval" #define AUTOMATICALLYCHECKSFORUPDATES_KEY @"automaticallyChecksForUpdates" Modified: trunk/SKLineInspector.m =================================================================== --- trunk/SKLineInspector.m 2011-10-20 09:21:06 UTC (rev 7519) +++ trunk/SKLineInspector.m 2011-10-20 09:36:32 UTC (rev 7520) @@ -41,7 +41,7 @@ #import <SkimNotes/SkimNotes.h> #import "NSSegmentedControl_SKExtensions.h" #import "SKNumberArrayFormatter.h" -#import "NSGeometry_SKExtensions.h" +#import "NSGraphics_SKExtensions.h" NSString *SKLineInspectorLineAttributeDidChangeNotification = @"SKLineInspectorLineAttributeDidChangeNotification"; Modified: trunk/SKNoteTypeSheetController.m =================================================================== --- trunk/SKNoteTypeSheetController.m 2011-10-20 09:21:06 UTC (rev 7519) +++ trunk/SKNoteTypeSheetController.m 2011-10-20 09:36:32 UTC (rev 7520) @@ -38,7 +38,7 @@ #import "SKNoteTypeSheetController.h" #import "NSWindowController_SKExtensions.h" -#import "NSGeometry_SKExtensions.h" +#import "NSGraphics_SKExtensions.h" #import "NSString_SKExtensions.h" #import "NSMenu_SKExtensions.h" #import <SKimNotes/SkimNotes.h> Modified: trunk/SKNoteWindowController.m =================================================================== --- trunk/SKNoteWindowController.m 2011-10-20 09:21:06 UTC (rev 7519) +++ trunk/SKNoteWindowController.m 2011-10-20 09:36:32 UTC (rev 7520) @@ -52,6 +52,7 @@ #import "NSString_SKExtensions.h" #import "SKGradientView.h" #import "NSGeometry_SKExtensions.h" +#import "NSGraphics_SKExtensions.h" #import "SKNoteTextView.h" #define EM_DASH_CHARACTER 0x2014 Modified: trunk/SKNotesPreferences.m =================================================================== --- trunk/SKNotesPreferences.m 2011-10-20 09:21:06 UTC (rev 7519) +++ trunk/SKNotesPreferences.m 2011-10-20 09:36:32 UTC (rev 7520) @@ -41,7 +41,7 @@ #import "SKStringConstants.h" #import "SKLineWell.h" #import "SKFontWell.h" -#import "NSGeometry_SKExtensions.h" +#import "NSGraphics_SKExtensions.h" #define VALUES_KEY_PATH(key) [@"values." stringByAppendingString:key] Modified: trunk/SKPDFView.m =================================================================== --- trunk/SKPDFView.m 2011-10-20 09:21:06 UTC (rev 7519) +++ trunk/SKPDFView.m 2011-10-20 09:36:32 UTC (rev 7520) @@ -70,6 +70,7 @@ #import "PDFView_SKExtensions.h" #import "NSMenu_SKExtensions.h" #import "NSGeometry_SKExtensions.h" +#import "NSGraphics_SKExtensions.h" #define ANNOTATION_MODE_COUNT 9 #define TOOL_MODE_COUNT 5 Modified: trunk/SKPreferenceController.m =================================================================== --- trunk/SKPreferenceController.m 2011-10-20 09:21:06 UTC (rev 7519) +++ trunk/SKPreferenceController.m 2011-10-20 09:36:32 UTC (rev 7520) @@ -46,7 +46,7 @@ #import "SKFontWell.h" #import "SKStringConstants.h" #import "NSView_SKExtensions.h" -#import "NSGeometry_SKExtensions.h" +#import "NSGraphics_SKExtensions.h" #define SKPreferencesToolbarIdentifier @"SKPreferencesToolbarIdentifier" Modified: trunk/SKPresentationOptionsSheetController.m =================================================================== --- trunk/SKPresentationOptionsSheetController.m 2011-10-20 09:21:06 UTC (rev 7519) +++ trunk/SKPresentationOptionsSheetController.m 2011-10-20 09:36:32 UTC (rev 7520) @@ -49,7 +49,7 @@ #import "SKImageToolTipWindow.h" #import "NSWindowController_SKExtensions.h" #import "NSDocument_SKExtensions.h" -#import "NSGeometry_SKExtensions.h" +#import "NSGraphics_SKExtensions.h" #define RIGHTARROW_CHARACTER 0x2192 Modified: trunk/SKSyncPreferences.m =================================================================== --- trunk/SKSyncPreferences.m 2011-10-20 09:21:06 UTC (rev 7519) +++ trunk/SKSyncPreferences.m 2011-10-20 09:36:32 UTC (rev 7520) @@ -39,7 +39,7 @@ #import "SKSyncPreferences.h" #import "SKPreferenceController.h" #import "SKStringConstants.h" -#import "NSGeometry_SKExtensions.h" +#import "NSGraphics_SKExtensions.h" static SKTeXEditor SKTeXEditors[] = {{@"TextMate", @"mate", @"-l %line \"%file\""}, {@"BBEdit", @"bbedit", @"+%line \"%file\""}, Modified: trunk/SKTextFieldSheetController.m =================================================================== --- trunk/SKTextFieldSheetController.m 2011-10-20 09:21:06 UTC (rev 7519) +++ trunk/SKTextFieldSheetController.m 2011-10-20 09:36:32 UTC (rev 7520) @@ -41,7 +41,7 @@ #import "SKBookmark.h" #import "NSWindowController_SKExtensions.h" #import "NSMenu_SKExtensions.h" -#import "NSGeometry_SKExtensions.h" +#import "NSGraphics_SKExtensions.h" @implementation SKTextFieldSheetController Modified: trunk/Skim.xcodeproj/project.pbxproj =================================================================== --- trunk/Skim.xcodeproj/project.pbxproj 2011-10-20 09:21:06 UTC (rev 7519) +++ trunk/Skim.xcodeproj/project.pbxproj 2011-10-20 09:36:32 UTC (rev 7520) @@ -77,6 +77,7 @@ CE121BFB11529D15001D92ED /* SKIBArray.m in Sources */ = {isa = PBXBuildFile; fileRef = CE121BFA11529D15001D92ED /* SKIBArray.m */; }; CE1248C513FEDCF200FFAE20 /* SKTemplateManager.m in Sources */ = {isa = PBXBuildFile; fileRef = CE1248C413FEDCF200FFAE20 /* SKTemplateManager.m */; }; CE12A73E134F215F003AED67 /* SKSelectCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = CE12A73D134F215F003AED67 /* SKSelectCommand.m */; }; + CE139A171450207500E9C069 /* NSGraphics_SKExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = CE139A161450207500E9C069 /* NSGraphics_SKExtensions.m */; }; CE171E3512C3AC1600291179 /* SKFileUpdateChecker.m in Sources */ = {isa = PBXBuildFile; fileRef = CE171E3412C3AC1600291179 /* SKFileUpdateChecker.m */; }; CE17F47E0F1A17E200E741DD /* SKPDFSynchronizerServer.m in Sources */ = {isa = PBXBuildFile; fileRef = CE17F47D0F1A17E200E741DD /* SKPDFSynchronizerServer.m */; }; CE19446310627483007E8770 /* BookmarksWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE19445C10627483007E8770 /* BookmarksWindow.xib */; }; @@ -595,6 +596,8 @@ CE1248C413FEDCF200FFAE20 /* SKTemplateManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SKTemplateManager.m; sourceTree = "<group>"; }; CE12A73C134F215F003AED67 /* SKSelectCommand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SKSelectCommand.h; sourceTree = "<group>"; }; CE12A73D134F215F003AED67 /* SKSelectCommand.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SKSelectCommand.m; sourceTree = "<group>"; }; + CE139A151450207500E9C069 /* NSGraphics_SKExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSGraphics_SKExtensions.h; sourceTree = "<group>"; }; + CE139A161450207500E9C069 /* NSGraphics_SKExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSGraphics_SKExtensions.m; sourceTree = "<group>"; }; CE157ED212D4EBC000515B85 /* Japanese */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = Japanese; path = Japanese.lproj/BookmarkSheet.strings; sourceTree = "<group>"; }; CE157ED312D4EBC000515B85 /* Japanese */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = Japanese; path = Japanese.lproj/BookmarksWindow.strings; sourceTree = "<group>"; }; CE157ED512D4EBC000515B85 /* Japanese */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = Japanese; path = Japanese.lproj/DisplayPreferences.strings; sourceTree = "<group>"; }; @@ -1904,6 +1907,8 @@ CE34FFA70DFF58FB00A7FFE6 /* NSEvent_SKExtensions.m */, CE24875A112C9651006B4FA5 /* NSFont_SKExtensions.h */, CE24875B112C9651006B4FA5 /* NSFont_SKExtensions.m */, + CE139A151450207500E9C069 /* NSGraphics_SKExtensions.h */, + CE139A161450207500E9C069 /* NSGraphics_SKExtensions.m */, CECDC4FC0C5966A80026AAEC /* NSImage_SKExtensions.h */, CECDC4FD0C5966A80026AAEC /* NSImage_SKExtensions.m */, CE3400AA0E0034DF00A7FFE6 /* NSMenu_SKExtensions.h */, @@ -2546,6 +2551,7 @@ CE030C6113C07A57007A47E9 /* PDFView_SKExtensions.m in Sources */, CEB402C313EDAD6100851D1B /* SKTemporaryData.m in Sources */, CE1248C513FEDCF200FFAE20 /* SKTemplateManager.m in Sources */, + CE139A171450207500E9C069 /* NSGraphics_SKExtensions.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hofman@us...> - 2011-10-20 09:21:12
|
Revision: 7519 http://skim-app.svn.sourceforge.net/skim-app/?rev=7519&view=rev Author: hofman Date: 2011-10-20 09:21:06 +0000 (Thu, 20 Oct 2011) Log Message: ----------- remove unused header import Modified Paths: -------------- trunk/PDFAnnotationLink_SKExtensions.m Modified: trunk/PDFAnnotationLink_SKExtensions.m =================================================================== --- trunk/PDFAnnotationLink_SKExtensions.m 2011-10-20 09:19:21 UTC (rev 7518) +++ trunk/PDFAnnotationLink_SKExtensions.m 2011-10-20 09:21:06 UTC (rev 7519) @@ -38,7 +38,6 @@ #import "PDFAnnotationLink_SKExtensions.h" #import "SKRuntime.h" -#import "NSGeometry_SKExtensions.h" @implementation PDFAnnotationLink (SKExtensions) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hofman@us...> - 2011-10-20 09:19:31
|
Revision: 7518 http://skim-app.svn.sourceforge.net/skim-app/?rev=7518&view=rev Author: hofman Date: 2011-10-20 09:19:21 +0000 (Thu, 20 Oct 2011) Log Message: ----------- Have the annotation classes draw the selection highlight, as it depends on the class. Draw rectangles for quad points (lines) rather than full bounds of markup notes. Modified Paths: -------------- trunk/NSGeometry_SKExtensions.h trunk/NSGeometry_SKExtensions.m trunk/PDFAnnotationLine_SKExtensions.m trunk/PDFAnnotationLink_SKExtensions.m trunk/PDFAnnotationMarkup_SKExtensions.m trunk/PDFAnnotation_SKExtensions.h trunk/PDFAnnotation_SKExtensions.m trunk/SKPDFView.m Modified: trunk/NSGeometry_SKExtensions.h =================================================================== --- trunk/NSGeometry_SKExtensions.h 2011-10-14 22:21:37 UTC (rev 7517) +++ trunk/NSGeometry_SKExtensions.h 2011-10-20 09:19:21 UTC (rev 7518) @@ -183,6 +183,11 @@ #pragma mark - +extern void SKDrawGrabHandle(NSPoint point, CGFloat radius, BOOL active); +extern void SKDrawGrabHandles(NSRect rect, CGFloat radius, NSInteger mask); + +#pragma mark - + extern void SKShiftAndResizeViews(NSArray *views, CGFloat dx, CGFloat dw); extern void SKAutoSizeButtons(NSArray *buttons, BOOL rightAlign); extern CGFloat SKAutoSizeLabelFields(NSArray *labelFields, NSArray *controls, BOOL resizeControls); Modified: trunk/NSGeometry_SKExtensions.m =================================================================== --- trunk/NSGeometry_SKExtensions.m 2011-10-14 22:21:37 UTC (rev 7517) +++ trunk/NSGeometry_SKExtensions.m 2011-10-20 09:19:21 UTC (rev 7518) @@ -112,6 +112,30 @@ #pragma mark - +void SKDrawGrabHandle(NSPoint point, CGFloat radius, BOOL active) +{ + NSBezierPath *path = [NSBezierPath bezierPathWithOvalInRect:NSMakeRect(point.x - 0.875 * radius, point.y - 0.875 * radius, 1.75 * radius, 1.75 * radius)]; + [path setLineWidth:0.25 * radius]; + [[NSColor colorWithCalibratedRed:0.737118 green:0.837339 blue:0.983108 alpha:active ? 1.0 : 0.8] setFill]; + [[NSColor colorWithCalibratedRed:0.278477 green:0.467857 blue:0.810941 alpha:active ? 1.0 : 0.8] setStroke]; + [path fill]; + [path stroke]; +} + +void SKDrawGrabHandles(NSRect rect, CGFloat radius, NSInteger mask) +{ + SKDrawGrabHandle(NSMakePoint(NSMinX(rect), NSMidY(rect)), radius, mask == SKMinXEdgeMask); + SKDrawGrabHandle(NSMakePoint(NSMaxX(rect), NSMidY(rect)), radius, mask == SKMaxXEdgeMask); + SKDrawGrabHandle(NSMakePoint(NSMidX(rect), NSMaxY(rect)), radius, mask == SKMaxYEdgeMask); + SKDrawGrabHandle(NSMakePoint(NSMidX(rect), NSMinY(rect)), radius, mask == SKMinYEdgeMask); + SKDrawGrabHandle(NSMakePoint(NSMinX(rect), NSMaxY(rect)), radius, mask == (SKMinXEdgeMask | SKMaxYEdgeMask)); + SKDrawGrabHandle(NSMakePoint(NSMinX(rect), NSMinY(rect)), radius, mask == (SKMinXEdgeMask | SKMinYEdgeMask)); + SKDrawGrabHandle(NSMakePoint(NSMaxX(rect), NSMaxY(rect)), radius, mask == (SKMaxXEdgeMask | SKMaxYEdgeMask)); + SKDrawGrabHandle(NSMakePoint(NSMaxX(rect), NSMinY(rect)), radius, mask == (SKMaxXEdgeMask | SKMinYEdgeMask)); +} + +#pragma mark - + #define MIN_BUTTON_WIDTH 82.0 #define MAX_BUTTON_WIDTH 100.0 #define EXTRA_BUTTON_WIDTH 12.0 Modified: trunk/PDFAnnotationLine_SKExtensions.m =================================================================== --- trunk/PDFAnnotationLine_SKExtensions.m 2011-10-14 22:21:37 UTC (rev 7517) +++ trunk/PDFAnnotationLine_SKExtensions.m 2011-10-20 09:19:21 UTC (rev 7518) @@ -113,6 +113,14 @@ return NSInsetRect(bounds, -16.0, -16.0); } +- (void)drawSelectionHighlight:(NSUInteger)mask { + NSPoint origin = [self bounds].origin; + NSPoint point = SKAddPoints(origin, [self startPoint]); + SKDrawGrabHandle(point, 4.0, mask == SKMinXEdgeMask); + point = SKAddPoints(origin, [self endPoint]); + SKDrawGrabHandle(point, 4.0, mask == SKMaxXEdgeMask); +} + - (NSSet *)keysForValuesToObserveForUndo { static NSSet *lineKeys = nil; if (lineKeys == nil) { Modified: trunk/PDFAnnotationLink_SKExtensions.m =================================================================== --- trunk/PDFAnnotationLink_SKExtensions.m 2011-10-14 22:21:37 UTC (rev 7517) +++ trunk/PDFAnnotationLink_SKExtensions.m 2011-10-20 09:19:21 UTC (rev 7518) @@ -38,6 +38,7 @@ #import "PDFAnnotationLink_SKExtensions.h" #import "SKRuntime.h" +#import "NSGeometry_SKExtensions.h" @implementation PDFAnnotationLink (SKExtensions) @@ -54,6 +55,20 @@ original_toolTip = (id (*)(id, SEL))SKReplaceInstanceMethodImplementationFromSelector(self, @selector(toolTip), @selector(replacement_toolTip)); } +- (void)drawSelectionHighlight:(NSUInteger)mask { + NSRect rect = NSInsetRect(NSIntegralRect([self bounds]), 1.0, 1.0); + CGFloat radius = floor(0.3 * NSHeight(rect)); + NSBezierPath *path = [NSBezierPath bezierPathWithRoundedRect:rect xRadius:radius yRadius:radius]; + [NSGraphicsContext saveGraphicsState]; + [NSBezierPath setDefaultLineWidth:2.0]; + [[NSColor colorWithCalibratedWhite:0.0 alpha:0.1] setFill]; + [[NSColor colorWithCalibratedWhite:0.0 alpha:0.5] setStroke]; + [path fill]; + [path stroke]; + [NSBezierPath setDefaultLineWidth:1.0]; + [NSGraphicsContext restoreGraphicsState]; +} + - (BOOL)isLink { return YES; } - (NSArray *)accessibilityAttributeNames { Modified: trunk/PDFAnnotationMarkup_SKExtensions.m =================================================================== --- trunk/PDFAnnotationMarkup_SKExtensions.m 2011-10-14 22:21:37 UTC (rev 7517) +++ trunk/PDFAnnotationMarkup_SKExtensions.m 2011-10-20 09:19:21 UTC (rev 7518) @@ -296,6 +296,22 @@ return bounds; } +- (void)drawSelectionHighlight:(NSUInteger)mask { + // archived annotations (or annotations we didn't create) won't have these + if ([self hasLineRects] == NO) + [self regenerateLineRects]; + + NSPointerArray *lines = [self lineRects]; + NSUInteger i, iMax = [lines count]; + + [NSGraphicsContext saveGraphicsState]; + [NSBezierPath setDefaultLineWidth:1.0]; + [[NSColor colorWithCalibratedRed:0.278477 green:0.467857 blue:0.810941 alpha:1.0] setStroke]; + for (i = 0; i < iMax; i++) + [NSBezierPath strokeRect:NSInsetRect(NSIntegralRect(*(NSRectPointer)[lines pointerAtIndex:i]), 0.5, 0.5)]; + [NSGraphicsContext restoreGraphicsState]; +} + - (BOOL)isMarkup { return YES; } - (BOOL)hasBorder { return NO; } Modified: trunk/PDFAnnotation_SKExtensions.h =================================================================== --- trunk/PDFAnnotation_SKExtensions.h 2011-10-14 22:21:37 UTC (rev 7517) +++ trunk/PDFAnnotation_SKExtensions.h 2011-10-20 09:19:21 UTC (rev 7518) @@ -79,6 +79,8 @@ - (NSRect)displayRectForBounds:(NSRect)bounds; +- (void)drawSelectionHighlight:(NSUInteger)mask; + - (void)registerUserName; - (NSSet *)keysForValuesToObserveForUndo; Modified: trunk/PDFAnnotation_SKExtensions.m =================================================================== --- trunk/PDFAnnotation_SKExtensions.m 2011-10-14 22:21:37 UTC (rev 7517) +++ trunk/PDFAnnotation_SKExtensions.m 2011-10-20 09:19:21 UTC (rev 7518) @@ -231,6 +231,16 @@ return bounds; } +- (void)drawSelectionHighlight:(NSUInteger)mask { + [NSGraphicsContext saveGraphicsState]; + [NSBezierPath setDefaultLineWidth:1.0]; + [[NSColor colorWithCalibratedRed:0.278477 green:0.467857 blue:0.810941 alpha:1.0] setStroke]; + [NSBezierPath strokeRect:NSInsetRect(NSIntegralRect([self bounds]), 0.5, 0.5)]; + if ([self isResizable]) + SKDrawGrabHandles([self bounds], 4.0, mask); + [NSGraphicsContext restoreGraphicsState]; +} + - (void)registerUserName { if ([[NSUserDefaults standardUserDefaults] boolForKey:SKUseUserNameKey]) { NSString *userName = [[NSUserDefaults standardUserDefaults] stringForKey:SKUserNameKey]; Modified: trunk/SKPDFView.m =================================================================== --- trunk/SKPDFView.m 2011-10-14 22:21:37 UTC (rev 7517) +++ trunk/SKPDFView.m 2011-10-20 09:19:21 UTC (rev 7518) @@ -69,6 +69,7 @@ #import "SKLineInspector.h" #import "PDFView_SKExtensions.h" #import "NSMenu_SKExtensions.h" +#import "NSGeometry_SKExtensions.h" #define ANNOTATION_MODE_COUNT 9 #define TOOL_MODE_COUNT 5 @@ -117,9 +118,6 @@ static inline NSInteger SKIndexOfRectAtYInOrderedRects(CGFloat y, NSPointerArray *rectArray, BOOL lower); -static void SKDrawGrabHandle(NSPoint point, CGFloat radius, BOOL active); -static void SKDrawGrabHandles(NSRect rect, CGFloat radius, NSInteger mask); - enum { SKNavigationNone, SKNavigationBottom, @@ -358,32 +356,8 @@ [NSGraphicsContext restoreGraphicsState]; } - if ([[activeAnnotation page] isEqual:pdfPage]) { - BOOL isLink = [activeAnnotation isLink]; - CGFloat lineWidth = isLink ? 2.0 : 1.0; - NSRect bounds = [activeAnnotation bounds]; - NSRect rect = NSInsetRect(NSIntegralRect(bounds), 0.5 * lineWidth, 0.5 * lineWidth); - [NSBezierPath setDefaultLineWidth:lineWidth]; - if (isLink) { - CGFloat radius = floor(0.3 * NSHeight(rect)); - NSBezierPath *path = [NSBezierPath bezierPathWithRoundedRect:rect xRadius:radius yRadius:radius]; - [[NSColor colorWithCalibratedWhite:0.0 alpha:0.1] setFill]; - [[NSColor colorWithCalibratedWhite:0.0 alpha:0.5] setStroke]; - [path fill]; - [path stroke]; - } else if ([[activeAnnotation type] isEqualToString:SKNLineString]) { - NSPoint point = SKAddPoints(bounds.origin, [(PDFAnnotationLine *)activeAnnotation startPoint]); - SKDrawGrabHandle(point, 4.0, dragMask == SKMinXEdgeMask); - point = SKAddPoints(bounds.origin, [(PDFAnnotationLine *)activeAnnotation endPoint]); - SKDrawGrabHandle(point, 4.0, dragMask == SKMaxXEdgeMask); - } else if (editField == nil) { - [[NSColor colorWithCalibratedRed:0.278477 green:0.467857 blue:0.810941 alpha:1.0] setStroke]; - [NSBezierPath strokeRect:rect]; - if ([activeAnnotation isResizable]) - SKDrawGrabHandles(bounds, 4.0, dragMask); - } - [NSBezierPath setDefaultLineWidth:1.0]; - } + if ([[activeAnnotation page] isEqual:pdfPage] && editField == nil) + [activeAnnotation drawSelectionHighlight:dragMask]; if ([[highlightAnnotation page] isEqual:pdfPage]) { NSRect bounds = [highlightAnnotation bounds]; @@ -4344,27 +4318,3 @@ } return MIN(i, iMax - 1); } - -#pragma mark Grab handles - -static void SKDrawGrabHandle(NSPoint point, CGFloat radius, BOOL active) -{ - NSBezierPath *path = [NSBezierPath bezierPathWithOvalInRect:NSMakeRect(point.x - 0.875 * radius, point.y - 0.875 * radius, 1.75 * radius, 1.75 * radius)]; - [path setLineWidth:0.25 * radius]; - [[NSColor colorWithCalibratedRed:0.737118 green:0.837339 blue:0.983108 alpha:active ? 1.0 : 0.8] setFill]; - [[NSColor colorWithCalibratedRed:0.278477 green:0.467857 blue:0.810941 alpha:active ? 1.0 : 0.8] setStroke]; - [path fill]; - [path stroke]; -} - -static void SKDrawGrabHandles(NSRect rect, CGFloat radius, NSInteger mask) -{ - SKDrawGrabHandle(NSMakePoint(NSMinX(rect), NSMidY(rect)), radius, mask == SKMinXEdgeMask); - SKDrawGrabHandle(NSMakePoint(NSMaxX(rect), NSMidY(rect)), radius, mask == SKMaxXEdgeMask); - SKDrawGrabHandle(NSMakePoint(NSMidX(rect), NSMaxY(rect)), radius, mask == SKMaxYEdgeMask); - SKDrawGrabHandle(NSMakePoint(NSMidX(rect), NSMinY(rect)), radius, mask == SKMinYEdgeMask); - SKDrawGrabHandle(NSMakePoint(NSMinX(rect), NSMaxY(rect)), radius, mask == (SKMinXEdgeMask | SKMaxYEdgeMask)); - SKDrawGrabHandle(NSMakePoint(NSMinX(rect), NSMinY(rect)), radius, mask == (SKMinXEdgeMask | SKMinYEdgeMask)); - SKDrawGrabHandle(NSMakePoint(NSMaxX(rect), NSMaxY(rect)), radius, mask == (SKMaxXEdgeMask | SKMaxYEdgeMask)); - SKDrawGrabHandle(NSMakePoint(NSMaxX(rect), NSMinY(rect)), radius, mask == (SKMaxXEdgeMask | SKMinYEdgeMask)); -} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hofman@us...> - 2011-10-14 22:21:44
|
Revision: 7517 http://skim-app.svn.sourceforge.net/skim-app/?rev=7517&view=rev Author: hofman Date: 2011-10-14 22:21:37 +0000 (Fri, 14 Oct 2011) Log Message: ----------- Extend and select freehand notes also when CapsLock is pressed Modified Paths: -------------- trunk/SKPDFView.m Modified: trunk/SKPDFView.m =================================================================== --- trunk/SKPDFView.m 2011-10-13 11:41:50 UTC (rev 7516) +++ trunk/SKPDFView.m 2011-10-14 22:21:37 UTC (rev 7517) @@ -3331,7 +3331,7 @@ mouseDownInAnnotation = YES; } } else if (([newActiveAnnotation isMarkup] || - (isInk && newActiveAnnotation && (newActiveAnnotation != activeAnnotation || isShift))) && + (isInk && newActiveAnnotation && (newActiveAnnotation != activeAnnotation || ([theEvent modifierFlags] & (NSShiftKeyMask | NSAlphaShiftKeyMask))))) && NSLeftMouseDragged == [[NSApp nextEventMatchingMask:(NSLeftMouseUpMask | NSLeftMouseDraggedMask) untilDate:[NSDate distantFuture] inMode:NSEventTrackingRunLoopMode dequeue:NO] type]) { // don't drag markup notes or in freehand tool mode, unless the note was previously selected, so we can select text or draw freehand strokes newActiveAnnotation = nil; @@ -3385,7 +3385,7 @@ [bezierPath moveToPoint:[self convertPoint:mouseDownLoc toPage:page]]; [bezierPath setLineCapStyle:NSRoundLineCapStyle]; [bezierPath setLineJoinStyle:NSRoundLineJoinStyle]; - if (([theEvent modifierFlags] & NSShiftKeyMask) && [[activeAnnotation type] isEqualToString:SKNInkString] && [[activeAnnotation page] isEqual:page]) { + if (([theEvent modifierFlags] & (NSShiftKeyMask | NSAlphaShiftKeyMask)) && [[activeAnnotation type] isEqualToString:SKNInkString] && [[activeAnnotation page] isEqual:page]) { pathColor = [[activeAnnotation color] retain]; [bezierPath setLineWidth:[activeAnnotation lineWidth]]; if (floor(NSAppKitVersionNumber) > NSAppKitVersionNumber10_5 && [activeAnnotation borderStyle] == kPDFBorderStyleDashed) { @@ -3435,9 +3435,11 @@ if (activeAnnotation) { [self removeActiveAnnotation:nil]; [self setActiveAnnotation:annotation]; - } else if ([theEvent modifierFlags] & NSShiftKeyMask) { + } else if ([theEvent modifierFlags] & (NSShiftKeyMask | NSAlphaShiftKeyMask)) { [self setActiveAnnotation:annotation]; } + } else if ([theEvent modifierFlags] & NSAlphaShiftKeyMask) { + [self setActiveAnnotation:nil]; } SKDESTROY(bezierPath); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hofman@us...> - 2011-10-13 11:42:01
|
Revision: 7516 http://skim-app.svn.sourceforge.net/skim-app/?rev=7516&view=rev Author: hofman Date: 2011-10-13 11:41:50 +0000 (Thu, 13 Oct 2011) Log Message: ----------- smarter backup way of finding source file for synctex Modified Paths: -------------- trunk/SKPDFSynchronizerServer.m Modified: trunk/SKPDFSynchronizerServer.m =================================================================== --- trunk/SKPDFSynchronizerServer.m 2011-10-12 18:40:24 UTC (rev 7515) +++ trunk/SKPDFSynchronizerServer.m 2011-10-13 11:41:50 UTC (rev 7516) @@ -574,7 +574,17 @@ - (BOOL)synctexFindPage:(NSUInteger *)pageIndexPtr location:(NSPoint *)pointPtr forLine:(NSInteger)line inFile:(NSString *)file { BOOL rv = NO; - NSString *filename = [filenames objectForKey:file] ?: [file lastPathComponent]; + NSString *filename = [filenames objectForKey:file] ?: [filenames objectForKey:[[file stringByResolvingSymlinksInPath] stringByStandardizingPath]]; + if (filename == nil) { + for (NSString *fn in filenames) { + if ([[fn lastPathComponent] caseInsensitiveCompare:[file lastPathComponent]] == NSOrderedSame) { + filename = [filenames objectForKey:file]; + break; + } + } + if (filename == nil) + filename = [file lastPathComponent]; + } if (synctex_display_query(scanner, [filename fileSystemRepresentation], (int)line + 1, 0) > 0) { synctex_node_t node = synctex_next_result(scanner); if (node) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hofman@us...> - 2011-10-12 18:40:33
|
Revision: 7515 http://skim-app.svn.sourceforge.net/skim-app/?rev=7515&view=rev Author: hofman Date: 2011-10-12 18:40:24 +0000 (Wed, 12 Oct 2011) Log Message: ----------- update synctex to version 1.16 Modified Paths: -------------- trunk/vendorsrc/jeromelaurens/synctex-parser/synctex_parser.h trunk/vendorsrc/jeromelaurens/synctex-parser/synctex_parser.m trunk/vendorsrc/jeromelaurens/synctex-parser/synctex_parser_local.h trunk/vendorsrc/jeromelaurens/synctex-parser/synctex_parser_readme.txt trunk/vendorsrc/jeromelaurens/synctex-parser/synctex_parser_utils.h trunk/vendorsrc/jeromelaurens/synctex-parser/synctex_parser_utils.m trunk/vendorsrc/jeromelaurens/synctex-parser/synctex_parser_version.txt Modified: trunk/vendorsrc/jeromelaurens/synctex-parser/synctex_parser.h =================================================================== --- trunk/vendorsrc/jeromelaurens/synctex-parser/synctex_parser.h 2011-10-10 09:20:09 UTC (rev 7514) +++ trunk/vendorsrc/jeromelaurens/synctex-parser/synctex_parser.h 2011-10-12 18:40:24 UTC (rev 7515) @@ -1,11 +1,12 @@ /* -Copyright (c) 2008, 2009 jerome DOT laurens AT u-bourgogne DOT fr +Copyright (c) 2008, 2009, 2010 , 2011 jerome DOT laurens AT u-bourgogne DOT fr This file is part of the SyncTeX package. -Latest Revision: Wed Jul 1 11:16:51 UTC 2009 +Latest Revision: Tue Jun 14 08:23:30 UTC 2011 -Version: 1.8 +Version: 1.16 + See synctex_parser_readme.txt for more details License: @@ -89,7 +90,7 @@ * It is the directory where all the auxiliary stuff is created. * Sometimes, the synctex output file and the pdf, dvi or xdv files are not created in the same directory. * This is the case in MikTeX (I will include this into TeX Live). - * This directory path can be nil, it will be ignored. + * This directory path can be nil, it will be ignored then. * It can be either absolute or relative to the directory of the output pdf (dvi or xdv) file. * If no synctex file is found in the same directory as the output file, then we try to find one in the build directory. * Please note that this new "build_directory" is provided as a convenient argument but should not be used. Modified: trunk/vendorsrc/jeromelaurens/synctex-parser/synctex_parser.m =================================================================== --- trunk/vendorsrc/jeromelaurens/synctex-parser/synctex_parser.m 2011-10-10 09:20:09 UTC (rev 7514) +++ trunk/vendorsrc/jeromelaurens/synctex-parser/synctex_parser.m 2011-10-12 18:40:24 UTC (rev 7515) @@ -1,13 +1,14 @@ /* -Copyright (c) 2008, 2009 jerome DOT laurens AT u-bourgogne DOT fr +Copyright (c) 2008, 2009, 2010 , 2011 jerome DOT laurens AT u-bourgogne DOT fr This file is part of the SyncTeX package. -Version: 1.9 +Latest Revision: Tue Jun 14 08:23:30 UTC 2011 + +Version: 1.16 + See synctex_parser_readme.txt for more details -Latest Revision: Wed Jul 1 11:18:18 UTC 2009 - License: -------- Permission is hereby granted, free of charge, to any person @@ -93,7 +94,9 @@ #include "synctex_parser.h" #include "synctex_parser_utils.h" -static const char * synctex_io_modes[synctex_io_mode_append+2] = {"r","rb","a","ab"}; +/* These are the possible extensions of the synctex file */ +const char * synctex_suffix = ".synctex"; +const char * synctex_suffix_gz = ".gz"; /* each synctex node has a class */ typedef struct __synctex_class_t _synctex_class_t; @@ -166,7 +169,7 @@ /* This macro is some kind of objc_msg_send. * It takes care of sending the proper message if possible. */ -# define SYNCTEX_MSG_SEND(NODE,SELECTOR) if(NODE && SYNCTEX_CAN_PERFORM(NODE,SELECTOR)) {\ +# define SYNCTEX_MSG_SEND(NODE,SELECTOR) if (NODE && SYNCTEX_CAN_PERFORM(NODE,SELECTOR)) {\ (*((((NODE)->class))->SELECTOR))(NODE);\ } @@ -184,14 +187,14 @@ /* Parent getter and setter */ # define SYNCTEX_PARENT(NODE) SYNCTEX_GET(NODE,parent) -# define SYNCTEX_SET_PARENT(NODE,NEW_PARENT) if(NODE && NEW_PARENT && SYNCTEX_CAN_PERFORM(NODE,parent)){\ +# define SYNCTEX_SET_PARENT(NODE,NEW_PARENT) if (NODE && NEW_PARENT && SYNCTEX_CAN_PERFORM(NODE,parent)){\ SYNCTEX_GETTER(NODE,parent)[0]=NEW_PARENT;\ } /* Child getter and setter */ # define SYNCTEX_CHILD(NODE) SYNCTEX_GET(NODE,child) -# define SYNCTEX_SET_CHILD(NODE,NEW_CHILD) if(NODE && NEW_CHILD){\ +# define SYNCTEX_SET_CHILD(NODE,NEW_CHILD) if (NODE && NEW_CHILD){\ SYNCTEX_GETTER(NODE,child)[0]=NEW_CHILD;\ SYNCTEX_GETTER(NEW_CHILD,parent)[0]=NODE;\ } @@ -199,9 +202,9 @@ /* Sibling getter and setter */ # define SYNCTEX_SIBLING(NODE) SYNCTEX_GET(NODE,sibling) -# define SYNCTEX_SET_SIBLING(NODE,NEW_SIBLING) if(NODE && NEW_SIBLING) {\ +# define SYNCTEX_SET_SIBLING(NODE,NEW_SIBLING) if (NODE && NEW_SIBLING) {\ SYNCTEX_GETTER(NODE,sibling)[0]=NEW_SIBLING;\ - if(SYNCTEX_CAN_PERFORM(NEW_SIBLING,parent) && SYNCTEX_CAN_PERFORM(NODE,parent)) {\ + if (SYNCTEX_CAN_PERFORM(NEW_SIBLING,parent) && SYNCTEX_CAN_PERFORM(NODE,parent)) {\ SYNCTEX_GETTER(NEW_SIBLING,parent)[0]=SYNCTEX_GETTER(NODE,parent)[0];\ }\ } @@ -210,15 +213,15 @@ * Friends are used mainly in forward synchronization aka from source to output. */ # define SYNCTEX_FRIEND(NODE) SYNCTEX_GET(NODE,friend) -# define SYNCTEX_SET_FRIEND(NODE,NEW_FRIEND) if(NODE && NEW_FRIEND){\ +# define SYNCTEX_SET_FRIEND(NODE,NEW_FRIEND) if (NODE && NEW_FRIEND){\ SYNCTEX_GETTER(NODE,friend)[0]=NEW_FRIEND;\ } -/* Next box getter and setter. The box tree can be traversed from one horizontal boxes to the other. +/* Next box getter and setter. The box tree can be traversed from one horizontal box to the other. * Navigation starts with the deeper boxes. */ # define SYNCTEX_NEXT_HORIZ_BOX(NODE) SYNCTEX_GET(NODE,next_box) -# define SYNCTEX_SET_NEXT_HORIZ_BOX(NODE,NEXT_BOX) if(NODE && NEXT_BOX){\ +# define SYNCTEX_SET_NEXT_HORIZ_BOX(NODE,NEXT_BOX) if (NODE && NEXT_BOX){\ SYNCTEX_GETTER(NODE,next_box)[0]=NEXT_BOX;\ } @@ -230,7 +233,7 @@ * This destructor is for all nodes with children. */ void _synctex_free_node(synctex_node_t node) { - if(node) { + if (node) { (*((node->class)->sibling))(node); SYNCTEX_FREE(SYNCTEX_SIBLING(node)); SYNCTEX_FREE(SYNCTEX_CHILD(node)); @@ -244,7 +247,7 @@ * This destructor is for nodes with no child. */ void _synctex_free_leaf(synctex_node_t node) { - if(node) { + if (node) { SYNCTEX_FREE(SYNCTEX_SIBLING(node)); free(node); } @@ -262,9 +265,9 @@ */ struct __synctex_scanner_t { gzFile file; /* The (possibly compressed) file */ - unsigned char * buffer_cur; /* current location in the buffer */ - unsigned char * buffer_start; /* start of the buffer */ - unsigned char * buffer_end; /* end of the buffer */ + char * buffer_cur; /* current location in the buffer */ + char * buffer_start; /* start of the buffer */ + char * buffer_end; /* end of the buffer */ char * output_fmt; /* dvi or pdf, not yet used */ char * output; /* the output name used to create the scanner */ char * synctex; /* the .synctex or .synctex.gz name used to create the scanner */ @@ -346,7 +349,7 @@ void _synctex_display_sheet(synctex_node_t sheet); void _synctex_log_sheet(synctex_node_t sheet); -static const _synctex_class_t synctex_class_sheet = { +static _synctex_class_t synctex_class_sheet = { NULL, /* No scanner yet */ synctex_node_type_sheet, /* Node type */ &_synctex_new_sheet, /* creator */ @@ -364,7 +367,7 @@ /* sheet node creator */ synctex_node_t _synctex_new_sheet(synctex_scanner_t scanner) { synctex_node_t node = _synctex_malloc(sizeof(synctex_sheet_t)); - if(node) { + if (node) { node->class = scanner?scanner->class+synctex_node_type_sheet:(synctex_class_t)&synctex_class_sheet; } return node; @@ -408,7 +411,7 @@ /* These are static class objects, each scanner will make a copy of them and setup the scanner field. */ -static const _synctex_class_t synctex_class_vbox = { +static _synctex_class_t synctex_class_vbox = { NULL, /* No scanner yet */ synctex_node_type_vbox, /* Node type */ &_synctex_new_vbox, /* creator */ @@ -426,7 +429,7 @@ /* vertical box node creator */ synctex_node_t _synctex_new_vbox(synctex_scanner_t scanner) { synctex_node_t node = _synctex_malloc(sizeof(synctex_vert_box_node_t)); - if(node) { + if (node) { node->class = scanner?scanner->class+synctex_node_type_vbox:(synctex_class_t)&synctex_class_vbox; } return node; @@ -461,7 +464,7 @@ void _synctex_log_horiz_box(synctex_node_t sheet); -static const _synctex_class_t synctex_class_hbox = { +static _synctex_class_t synctex_class_hbox = { NULL, /* No scanner yet */ synctex_node_type_hbox, /* Node type */ &_synctex_new_hbox, /* creator */ @@ -479,7 +482,7 @@ /* horizontal box node creator */ synctex_node_t _synctex_new_hbox(synctex_scanner_t scanner) { synctex_node_t node = _synctex_malloc(sizeof(synctex_horiz_box_node_t)); - if(node) { + if (node) { node->class = scanner?scanner->class+synctex_node_type_hbox:(synctex_class_t)&synctex_class_hbox; } return node; @@ -499,7 +502,7 @@ void _synctex_log_void_box(synctex_node_t sheet); void _synctex_display_void_vbox(synctex_node_t node); -static const _synctex_class_t synctex_class_void_vbox = { +static _synctex_class_t synctex_class_void_vbox = { NULL, /* No scanner yet */ synctex_node_type_void_vbox,/* Node type */ &_synctex_new_void_vbox, /* creator */ @@ -517,7 +520,7 @@ /* vertical void box node creator */ synctex_node_t _synctex_new_void_vbox(synctex_scanner_t scanner) { synctex_node_t node = _synctex_malloc(sizeof(synctex_void_box_node_t)); - if(node) { + if (node) { node->class = scanner?scanner->class+synctex_node_type_void_vbox:(synctex_class_t)&synctex_class_void_vbox; } return node; @@ -526,7 +529,7 @@ synctex_node_t _synctex_new_void_hbox(synctex_scanner_t scanner); void _synctex_display_void_hbox(synctex_node_t node); -static const _synctex_class_t synctex_class_void_hbox = { +static _synctex_class_t synctex_class_void_hbox = { NULL, /* No scanner yet */ synctex_node_type_void_hbox,/* Node type */ &_synctex_new_void_hbox, /* creator */ @@ -544,7 +547,7 @@ /* horizontal void box node creator */ synctex_node_t _synctex_new_void_hbox(synctex_scanner_t scanner) { synctex_node_t node = _synctex_malloc(sizeof(synctex_void_box_node_t)); - if(node) { + if (node) { node->class = scanner?scanner->class+synctex_node_type_void_hbox:(synctex_class_t)&synctex_class_void_hbox; } return node; @@ -572,7 +575,7 @@ synctex_node_t _synctex_new_math(synctex_scanner_t scanner); void _synctex_display_math(synctex_node_t node); -static const _synctex_class_t synctex_class_math = { +static _synctex_class_t synctex_class_math = { NULL, /* No scanner yet */ synctex_node_type_math, /* Node type */ &_synctex_new_math, /* creator */ @@ -589,7 +592,7 @@ synctex_node_t _synctex_new_math(synctex_scanner_t scanner) { synctex_node_t node = _synctex_malloc(sizeof(synctex_medium_node_t)); - if(node) { + if (node) { node->class = scanner?scanner->class+synctex_node_type_math:(synctex_class_t)&synctex_class_math; } return node; @@ -599,7 +602,7 @@ synctex_node_t _synctex_new_kern(synctex_scanner_t scanner); void _synctex_display_kern(synctex_node_t node); -static const _synctex_class_t synctex_class_kern = { +static _synctex_class_t synctex_class_kern = { NULL, /* No scanner yet */ synctex_node_type_kern, /* Node type */ &_synctex_new_kern, /* creator */ @@ -616,7 +619,7 @@ synctex_node_t _synctex_new_kern(synctex_scanner_t scanner) { synctex_node_t node = _synctex_malloc(sizeof(synctex_medium_node_t)); - if(node) { + if (node) { node->class = scanner?scanner->class+synctex_node_type_kern:(synctex_class_t)&synctex_class_kern; } return node; @@ -635,7 +638,7 @@ synctex_node_t _synctex_new_glue(synctex_scanner_t scanner); void _synctex_display_glue(synctex_node_t node); -static const _synctex_class_t synctex_class_glue = { +static _synctex_class_t synctex_class_glue = { NULL, /* No scanner yet */ synctex_node_type_glue, /* Node type */ &_synctex_new_glue, /* creator */ @@ -651,7 +654,7 @@ }; synctex_node_t _synctex_new_glue(synctex_scanner_t scanner) { synctex_node_t node = _synctex_malloc(sizeof(synctex_medium_node_t)); - if(node) { + if (node) { node->class = scanner?scanner->class+synctex_node_type_glue:(synctex_class_t)&synctex_class_glue; } return node; @@ -661,7 +664,7 @@ synctex_node_t _synctex_new_boundary(synctex_scanner_t scanner); void _synctex_display_boundary(synctex_node_t node); -static const _synctex_class_t synctex_class_boundary = { +static _synctex_class_t synctex_class_boundary = { NULL, /* No scanner yet */ synctex_node_type_boundary, /* Node type */ &_synctex_new_boundary, /* creator */ @@ -678,7 +681,7 @@ synctex_node_t _synctex_new_boundary(synctex_scanner_t scanner) { synctex_node_t node = _synctex_malloc(sizeof(synctex_small_node_t)); - if(node) { + if (node) { node->class = scanner?scanner->class+synctex_node_type_boundary:(synctex_class_t)&synctex_class_boundary; } return node; @@ -700,7 +703,7 @@ void _synctex_display_input(synctex_node_t node); void _synctex_log_input(synctex_node_t sheet); -static const _synctex_class_t synctex_class_input = { +static _synctex_class_t synctex_class_input = { NULL, /* No scanner yet */ synctex_node_type_input, /* Node type */ &_synctex_new_input, /* creator */ @@ -717,13 +720,13 @@ synctex_node_t _synctex_new_input(synctex_scanner_t scanner) { synctex_node_t node = _synctex_malloc(sizeof(synctex_input_t)); - if(node) { + if (node) { node->class = scanner?scanner->class+synctex_node_type_input:(synctex_class_t)&synctex_class_input; } return node; } void _synctex_free_input(synctex_node_t node){ - if(node) { + if (node) { SYNCTEX_FREE(SYNCTEX_SIBLING(node)); free(SYNCTEX_NAME(node)); free(node); @@ -754,15 +757,15 @@ return SYNCTEX_SIBLING(node); } synctex_node_t synctex_node_next(synctex_node_t node) { - if(SYNCTEX_CHILD(node)) { + if (SYNCTEX_CHILD(node)) { return SYNCTEX_CHILD(node); } sibling: - if(SYNCTEX_SIBLING(node)) { + if (SYNCTEX_SIBLING(node)) { return SYNCTEX_SIBLING(node); } - if((node = SYNCTEX_PARENT(node))) { - if(node->class->type == synctex_node_type_sheet) {/* EXC_BAD_ACCESS? */ + if ((node = SYNCTEX_PARENT(node))) { + if (node->class->type == synctex_node_type_sheet) {/* EXC_BAD_ACCESS? */ return NULL; } goto sibling; @@ -776,7 +779,7 @@ /* Public node accessor: the type */ synctex_node_type_t synctex_node_type(synctex_node_t node) { - if(node) { + if (node) { return (((node)->class))->type; } return synctex_node_type_error; @@ -815,7 +818,7 @@ } void _synctex_log_sheet(synctex_node_t sheet) { - if(sheet) { + if (sheet) { printf("%s:%i\n",synctex_node_isa(sheet),SYNCTEX_PAGE(sheet)); printf("SELF:%p",(void *)sheet); printf(" SYNCTEX_PARENT:%p",(void *)SYNCTEX_PARENT(sheet)); @@ -918,7 +921,7 @@ } void _synctex_display_sheet(synctex_node_t sheet) { - if(sheet) { + if (sheet) { printf("....{%i\n",SYNCTEX_PAGE(sheet)); SYNCTEX_DISPLAY(SYNCTEX_CHILD(sheet)); printf("....}\n"); @@ -1046,7 +1049,7 @@ # define SYNCTEX_FILE (scanner->file) /* Actually, the minimum buffer size is driven by integer and float parsing. - * ±0.123456789e123 + * \xB10.123456789e123 */ # define SYNCTEX_BUFFER_MIN_SIZE 16 # define SYNCTEX_BUFFER_SIZE 32768 @@ -1072,6 +1075,7 @@ synctex_status_t _synctex_setup_visible_box(synctex_node_t box); synctex_status_t _synctex_horiz_box_setup_visible(synctex_node_t node,int h, int v); synctex_status_t _synctex_scan_sheet(synctex_scanner_t scanner, synctex_node_t parent); +synctex_status_t _synctex_scan_nested_sheet(synctex_scanner_t scanner); synctex_status_t _synctex_scan_content(synctex_scanner_t scanner); int synctex_scanner_pre_x_offset(synctex_scanner_t scanner); int synctex_scanner_pre_y_offset(synctex_scanner_t scanner); @@ -1091,30 +1095,30 @@ * when there was an error reading the synctex file. */ synctex_status_t _synctex_buffer_get_available_size(synctex_scanner_t scanner, size_t * size_ptr) { size_t available = 0; - if(NULL == scanner || NULL == size_ptr) { + if (NULL == scanner || NULL == size_ptr) { return SYNCTEX_STATUS_BAD_ARGUMENT; } # define size (* size_ptr) - if(size>SYNCTEX_BUFFER_SIZE){ + if (size>SYNCTEX_BUFFER_SIZE){ size = SYNCTEX_BUFFER_SIZE; } available = SYNCTEX_END - SYNCTEX_CUR; /* available is the number of unparsed chars in the buffer */ - if(size<=available) { + if (size<=available) { /* There are already sufficiently many characters in the buffer */ size = available; return SYNCTEX_STATUS_OK; } - if(SYNCTEX_FILE) { + if (SYNCTEX_FILE) { /* Copy the remaining part of the buffer to the beginning, * then read the next part of the file */ int already_read = 0; - if(available) { + if (available) { memmove(SYNCTEX_START, SYNCTEX_CUR, available); } SYNCTEX_CUR = SYNCTEX_START + available; /* the next character after the move, will change. */ /* Fill the buffer up to its end */ already_read = gzread(SYNCTEX_FILE,(void *)SYNCTEX_CUR,SYNCTEX_BUFFER_SIZE - available); - if(already_read>0) { + if (already_read>0) { /* We assume that 0<already_read<=SYNCTEX_BUFFER_SIZE - available, such that * SYNCTEX_CUR + already_read = SYNCTEX_START + available + already_read <= SYNCTEX_START + SYNCTEX_BUFFER_SIZE */ SYNCTEX_END = SYNCTEX_CUR + already_read; @@ -1125,29 +1129,28 @@ SYNCTEX_CUR = SYNCTEX_START; size = SYNCTEX_END - SYNCTEX_CUR; /* == old available + already_read*/ return SYNCTEX_STATUS_OK; /* May be available is less than size, the caller will have to test. */ - } else if(0>already_read) { - /* There is an error in zlib */ + } else if (0>already_read) { + /* There is a possible error in reading the file */ int errnum = 0; const char * error_string = gzerror(SYNCTEX_FILE, &errnum); - if(Z_ERRNO == errnum) { + if (Z_ERRNO == errnum) { /* There is an error in zlib caused by the file system */ _synctex_error("gzread error from the file system (%i)",errno); - } else { + return SYNCTEX_STATUS_ERROR; + } else if (errnum) { _synctex_error("gzread error (%i:%i,%s)",already_read,errnum,error_string); + return SYNCTEX_STATUS_ERROR; } - return SYNCTEX_STATUS_ERROR; - } else { - /* Nothing was read, we are at the end of the file. */ - gzclose(SYNCTEX_FILE); - SYNCTEX_FILE = NULL; - SYNCTEX_END = SYNCTEX_CUR; - SYNCTEX_CUR = SYNCTEX_START; - * SYNCTEX_END = '\0';/* Terminate the string properly.*/ - size = SYNCTEX_END - SYNCTEX_CUR; - return SYNCTEX_STATUS_EOF; /* there might be a bit of text left */ } - /* At this point, the function has already returned from above */ - } + /* Nothing was read, we are at the end of the file. */ + gzclose(SYNCTEX_FILE); + SYNCTEX_FILE = NULL; + SYNCTEX_END = SYNCTEX_CUR; + SYNCTEX_CUR = SYNCTEX_START; + * SYNCTEX_END = '\0';/* Terminate the string properly.*/ + size = SYNCTEX_END - SYNCTEX_CUR; + return SYNCTEX_STATUS_EOF; /* there might be a bit of text left */ + } /* We cannot enlarge the buffer because the end of the file was reached. */ size = available; return SYNCTEX_STATUS_EOF; @@ -1166,12 +1169,12 @@ synctex_status_t _synctex_next_line(synctex_scanner_t scanner) { synctex_status_t status = SYNCTEX_STATUS_OK; size_t available = 0; - if(NULL == scanner) { + if (NULL == scanner) { return SYNCTEX_STATUS_BAD_ARGUMENT; } infinite_loop: while(SYNCTEX_CUR<SYNCTEX_END) { - if(*SYNCTEX_CUR == '\n') { + if (*SYNCTEX_CUR == '\n') { ++SYNCTEX_CUR; available = 1; return _synctex_buffer_get_available_size(scanner, &available); @@ -1182,7 +1185,7 @@ * will read another bunch of synctex file. Little by little, we advance to the end of the file. */ available = 1; status = _synctex_buffer_get_available_size(scanner, &available); - if(status<=0) { + if (status<=0) { return status; } goto infinite_loop; @@ -1203,33 +1206,33 @@ size_t remaining_len = 0; /* the number of remaining characters of the_string that should match */ size_t available = 0; synctex_status_t status = 0; - if(NULL == scanner || NULL == the_string) { + if (NULL == scanner || NULL == the_string) { return SYNCTEX_STATUS_BAD_ARGUMENT; } remaining_len = strlen(the_string); /* All the_string should match */ - if(0 == remaining_len) { + if (0 == remaining_len) { return SYNCTEX_STATUS_BAD_ARGUMENT; } /* How many characters available in the buffer? */ available = remaining_len; status = _synctex_buffer_get_available_size(scanner,&available); - if(status<SYNCTEX_STATUS_EOF) { + if (status<SYNCTEX_STATUS_EOF) { return status; } /* Maybe we have less characters than expected because the buffer is too small. */ - if(available>=remaining_len) { + if (available>=remaining_len) { /* The buffer is sufficiently big to hold the expected number of characters. */ - if(strncmp((char *)SYNCTEX_CUR,the_string,remaining_len)) { + if (strncmp((char *)SYNCTEX_CUR,the_string,remaining_len)) { return SYNCTEX_STATUS_NOT_OK; } return_OK: /* Advance SYNCTEX_CUR to the next character after the_string. */ SYNCTEX_CUR += remaining_len; return SYNCTEX_STATUS_OK; - } else if(strncmp((char *)SYNCTEX_CUR,the_string,available)) { + } else if (strncmp((char *)SYNCTEX_CUR,the_string,available)) { /* No need to goo further, this is not the expected string in the buffer. */ return SYNCTEX_STATUS_NOT_OK; - } else if(SYNCTEX_FILE) { + } else if (SYNCTEX_FILE) { /* The buffer was too small to contain remaining_len characters. * We have to cut the string into pieces. */ z_off_t offset = 0L; @@ -1239,7 +1242,7 @@ remaining_len -= available; tested_len += available; SYNCTEX_CUR += available; /* We validate the tested characters. */ - if(0 == remaining_len) { + if (0 == remaining_len) { /* Nothing left to test, we have found the given string, we return the length. */ return tested_len; } @@ -1264,13 +1267,13 @@ * We will definitely have to recover the previous state in case we do not find the expected string. */ available = remaining_len; status = _synctex_buffer_get_available_size(scanner,&available); - if(status<SYNCTEX_STATUS_EOF) { + if (status<SYNCTEX_STATUS_EOF) { return status; /* This is an error, no need to go further. */ } - if(available==0) { + if (available==0) { /* Missing characters: recover the initial state of the file and return. */ return_NOT_OK: - if(offset != gzseek(SYNCTEX_FILE,offset,SEEK_SET)) { + if (offset != gzseek(SYNCTEX_FILE,offset,SEEK_SET)) { /* This is a critical error, we could not recover the previous state. */ _synctex_error("can't seek file"); return SYNCTEX_STATUS_ERROR; @@ -1280,9 +1283,9 @@ SYNCTEX_CUR = SYNCTEX_END; return SYNCTEX_STATUS_NOT_OK; } - if(available<remaining_len) { + if (available<remaining_len) { /* We'll have to loop one more time. */ - if(strncmp((char *)SYNCTEX_CUR,the_string,available)) { + if (strncmp((char *)SYNCTEX_CUR,the_string,available)) { /* This is not the expected string, recover the previous state and return. */ goto return_NOT_OK; } @@ -1292,14 +1295,14 @@ remaining_len -= available; tested_len += available; SYNCTEX_CUR += available; /* We validate the tested characters. */ - if(0 == remaining_len) { + if (0 == remaining_len) { /* Nothing left to test, we have found the given string. */ return SYNCTEX_STATUS_OK; } goto more_characters; } /* This is the last step. */ - if(strncmp((char *)SYNCTEX_CUR,the_string,remaining_len)) { + if (strncmp((char *)SYNCTEX_CUR,the_string,remaining_len)) { /* This is not the expected string, recover the previous state and return. */ goto return_NOT_OK; } @@ -1321,34 +1324,34 @@ * The given scanner argument must not be NULL, on the contrary, value_ref may be NULL. */ synctex_status_t _synctex_decode_int(synctex_scanner_t scanner, int* value_ref) { - unsigned char * ptr = NULL; - unsigned char * end = NULL; + char * ptr = NULL; + char * end = NULL; int result = 0; size_t available = 0; synctex_status_t status = 0; - if(NULL == scanner) { + if (NULL == scanner) { return SYNCTEX_STATUS_BAD_ARGUMENT; } available = SYNCTEX_BUFFER_MIN_SIZE; status = _synctex_buffer_get_available_size(scanner, &available); - if(status<SYNCTEX_STATUS_EOF) { + if (status<SYNCTEX_STATUS_EOF) { return status;/* Forward error. */ } - if(available==0) { + if (available==0) { return SYNCTEX_STATUS_EOF;/* it is the end of file. */ } ptr = SYNCTEX_CUR; - if(*ptr==':' || *ptr==',') { + if (*ptr==':' || *ptr==',') { ++ptr; --available; - if(available==0) { + if (available==0) { return SYNCTEX_STATUS_NOT_OK;/* It is not possible to scan an int */ } } - result = (int)strtol((char *)ptr, (char **)&end, 10); - if(end>ptr) { + result = (int)strtol(ptr, &end, 10); + if (end>ptr) { SYNCTEX_CUR = end; - if(value_ref) { + if (value_ref) { * value_ref = result; } return SYNCTEX_STATUS_OK;/* Successfully scanned an int */ @@ -1374,23 +1377,23 @@ * SYNCTEX_STATUS_BAD_ARGUMENT is returned. */ synctex_status_t _synctex_decode_string(synctex_scanner_t scanner, char ** value_ref) { - unsigned char * end = NULL; + char * end = NULL; size_t current_size = 0; size_t new_size = 0; size_t len = 0;/* The number of bytes to copy */ size_t available = 0; synctex_status_t status = 0; - if(NULL == scanner || NULL == value_ref) { + if (NULL == scanner || NULL == value_ref) { return SYNCTEX_STATUS_BAD_ARGUMENT; } /* The buffer must at least contain one character: the '\n' end of line marker */ - if(SYNCTEX_CUR>=SYNCTEX_END) { + if (SYNCTEX_CUR>=SYNCTEX_END) { available = 1; status = _synctex_buffer_get_available_size(scanner,&available); - if(status < 0) { + if (status < 0) { return status; } - if(0 == available) { + if (0 == available) { return SYNCTEX_STATUS_EOF; } } @@ -1401,11 +1404,11 @@ * value_ref = NULL;/* Initialize, it will be realloc'ed */ /* We scan all the characters up to the next '\n' */ next_character: - if(end<SYNCTEX_END) { - if(*end == '\n') { + if (end<SYNCTEX_END) { + if (*end == '\n') { /* OK, we found where to stop */ len = end - SYNCTEX_CUR; - if(current_size>UINT_MAX-len-1) { + if (current_size>UINT_MAX-len-1) { /* But we have reached the limit: we do not have current_size+len+1>UINT_MAX. * We return the missing amount of memory. * This will never occur in practice. */ @@ -1415,8 +1418,8 @@ /* We have current_size+len+1<=UINT_MAX * or equivalently new_size<UINT_MAX, * where we have assumed that len<UINT_MAX */ - if((* value_ref = realloc(* value_ref,new_size+1)) != NULL) { - if(memcpy((*value_ref)+current_size,SYNCTEX_CUR,len)) { + if ((* value_ref = realloc(* value_ref,new_size+1)) != NULL) { + if (memcpy((*value_ref)+current_size,SYNCTEX_CUR,len)) { (* value_ref)[new_size]='\0'; /* Terminate the string */ SYNCTEX_CUR += len;/* Advance to the terminating '\n' */ return SYNCTEX_STATUS_OK; @@ -1435,14 +1438,14 @@ } else { /* end == SYNCTEX_END */ len = SYNCTEX_END - SYNCTEX_CUR; - if(current_size>UINT_MAX-len-1) { + if (current_size>UINT_MAX-len-1) { /* We have reached the limit. */ _synctex_error("limit reached (missing %i).",current_size-(UINT_MAX-len-1)); return SYNCTEX_STATUS_ERROR; } new_size = current_size+len; - if((* value_ref = realloc(* value_ref,new_size+1)) != NULL) { - if(memcpy((*value_ref)+current_size,SYNCTEX_CUR,len)) { + if ((* value_ref = realloc(* value_ref,new_size+1)) != NULL) { + if (memcpy((*value_ref)+current_size,SYNCTEX_CUR,len)) { (* value_ref)[new_size]='\0'; /* Terminate the string */ SYNCTEX_CUR = SYNCTEX_END;/* Advance the cursor to the end of the bufer */ return SYNCTEX_STATUS_OK; @@ -1465,22 +1468,22 @@ synctex_status_t status = 0; size_t available = 0; synctex_node_t input = NULL; - if(NULL == scanner) { + if (NULL == scanner) { return SYNCTEX_STATUS_BAD_ARGUMENT; } status = _synctex_match_string(scanner,"Input:"); - if(status<SYNCTEX_STATUS_OK) { + if (status<SYNCTEX_STATUS_OK) { return status; } /* Create a node */ input = _synctex_new_input(scanner); - if(NULL == input) { + if (NULL == input) { _synctex_error("could not create an input node."); return SYNCTEX_STATUS_ERROR; } /* Decode the synctag */ status = _synctex_decode_int(scanner,&(SYNCTEX_TAG(input))); - if(status<SYNCTEX_STATUS_OK) { + if (status<SYNCTEX_STATUS_OK) { _synctex_error("bad format of input node."); SYNCTEX_FREE(input); return status; @@ -1488,10 +1491,10 @@ /* The next character is a field separator, we expect one character in the buffer. */ available = 1; status = _synctex_buffer_get_available_size(scanner, &available); - if(status<=SYNCTEX_STATUS_ERROR) { + if (status<=SYNCTEX_STATUS_ERROR) { return status; } - if(0 == available) { + if (0 == available) { return SYNCTEX_STATUS_EOF; } /* We can now safely advance to the next character, stepping over the field separator. */ @@ -1499,7 +1502,7 @@ --available; /* Then we scan the file name */ status = _synctex_decode_string(scanner,&(SYNCTEX_NAME(input))); - if(status<SYNCTEX_STATUS_OK) { + if (status<SYNCTEX_STATUS_OK) { SYNCTEX_FREE(input); return status; } @@ -1512,7 +1515,7 @@ typedef synctex_status_t (*synctex_decoder_t)(synctex_scanner_t,void *); -synctex_status_t _synctex_scan_named(synctex_scanner_t scanner,char * name,void * value_ref,synctex_decoder_t decoder); +synctex_status_t _synctex_scan_named(synctex_scanner_t scanner,const char * name,void * value_ref,synctex_decoder_t decoder); /* Used when parsing the synctex file. * Read one of the settings. @@ -1522,18 +1525,18 @@ * On return, the scanner points to the next character after the decoded object whatever it is. * It is the responsibility of the caller to prepare the scanner for the next line. */ -synctex_status_t _synctex_scan_named(synctex_scanner_t scanner,char * name,void * value_ref,synctex_decoder_t decoder) { +synctex_status_t _synctex_scan_named(synctex_scanner_t scanner,const char * name,void * value_ref,synctex_decoder_t decoder) { synctex_status_t status = 0; - if(NULL == scanner || NULL == name || NULL == value_ref || NULL == decoder) { + if (NULL == scanner || NULL == name || NULL == value_ref || NULL == decoder) { return SYNCTEX_STATUS_BAD_ARGUMENT; } not_found: status = _synctex_match_string(scanner,name); - if(status<SYNCTEX_STATUS_NOT_OK) { + if (status<SYNCTEX_STATUS_NOT_OK) { return status; - } else if(status == SYNCTEX_STATUS_NOT_OK) { + } else if (status == SYNCTEX_STATUS_NOT_OK) { status = _synctex_next_line(scanner); - if(status<SYNCTEX_STATUS_OK) { + if (status<SYNCTEX_STATUS_OK) { return status; } goto not_found; @@ -1547,60 +1550,60 @@ */ synctex_status_t _synctex_scan_preamble(synctex_scanner_t scanner) { synctex_status_t status = 0; - if(NULL == scanner) { + if (NULL == scanner) { return SYNCTEX_STATUS_BAD_ARGUMENT; } status = _synctex_scan_named(scanner,"SyncTeX Version:",&(scanner->version),(synctex_decoder_t)&_synctex_decode_int); - if(status<SYNCTEX_STATUS_OK) { + if (status<SYNCTEX_STATUS_OK) { return status; } status = _synctex_next_line(scanner); - if(status<SYNCTEX_STATUS_OK) { + if (status<SYNCTEX_STATUS_OK) { return status; } /* Read all the input records */ do { status = _synctex_scan_input(scanner); - if(status<SYNCTEX_STATUS_NOT_OK) { + if (status<SYNCTEX_STATUS_NOT_OK) { return status; } } while(status == SYNCTEX_STATUS_OK); /* the loop exits when status == SYNCTEX_STATUS_NOT_OK */ /* Now read all the required settings. */ status = _synctex_scan_named(scanner,"Output:",&(scanner->output_fmt),(synctex_decoder_t)&_synctex_decode_string); - if(status<SYNCTEX_STATUS_NOT_OK) { + if (status<SYNCTEX_STATUS_NOT_OK) { return status; } status = _synctex_next_line(scanner); - if(status<SYNCTEX_STATUS_OK) { + if (status<SYNCTEX_STATUS_OK) { return status; } status = _synctex_scan_named(scanner,"Magnification:",&(scanner->pre_magnification),(synctex_decoder_t)&_synctex_decode_int); - if(status<SYNCTEX_STATUS_OK) { + if (status<SYNCTEX_STATUS_OK) { return status; } status = _synctex_next_line(scanner); - if(status<SYNCTEX_STATUS_OK) { + if (status<SYNCTEX_STATUS_OK) { return status; } status = _synctex_scan_named(scanner,"Unit:",&(scanner->pre_unit),(synctex_decoder_t)&_synctex_decode_int); - if(status<SYNCTEX_STATUS_OK) { + if (status<SYNCTEX_STATUS_OK) { return status; } status = _synctex_next_line(scanner); - if(status<SYNCTEX_STATUS_OK) { + if (status<SYNCTEX_STATUS_OK) { return status; } status = _synctex_scan_named(scanner,"X Offset:",&(scanner->pre_x_offset),(synctex_decoder_t)&_synctex_decode_int); - if(status<SYNCTEX_STATUS_OK) { + if (status<SYNCTEX_STATUS_OK) { return status; } status = _synctex_next_line(scanner); - if(status<SYNCTEX_STATUS_OK) { + if (status<SYNCTEX_STATUS_OK) { return status; } status = _synctex_scan_named(scanner,"Y Offset:",&(scanner->pre_y_offset),(synctex_decoder_t)&_synctex_decode_int); - if(status<SYNCTEX_STATUS_OK) { + if (status<SYNCTEX_STATUS_OK) { return status; } return _synctex_next_line(scanner); @@ -1609,78 +1612,78 @@ /* parse a float with a dimension */ synctex_status_t _synctex_scan_float_and_dimension(synctex_scanner_t scanner, float * value_ref) { synctex_status_t status = 0; - unsigned char * endptr = NULL; + char * endptr = NULL; float f = 0; #ifdef HAVE_SETLOCALE char * loc = setlocale(LC_NUMERIC, NULL); #endif size_t available = 0; - if(NULL == scanner || NULL == value_ref) { + if (NULL == scanner || NULL == value_ref) { return SYNCTEX_STATUS_BAD_ARGUMENT; } available = SYNCTEX_BUFFER_MIN_SIZE; status = _synctex_buffer_get_available_size(scanner, &available); - if(status<SYNCTEX_STATUS_EOF) { + if (status<SYNCTEX_STATUS_EOF) { _synctex_error("problem with float."); return status; } #ifdef HAVE_SETLOCALE setlocale(LC_NUMERIC, "C"); #endif - f = strtod((char *)SYNCTEX_CUR,(char **)&endptr); + f = strtod(SYNCTEX_CUR,&endptr); #ifdef HAVE_SETLOCALE setlocale(LC_NUMERIC, loc); #endif - if(endptr == SYNCTEX_CUR) { + if (endptr == SYNCTEX_CUR) { _synctex_error("a float was expected."); return SYNCTEX_STATUS_ERROR; } SYNCTEX_CUR = endptr; - if((status = _synctex_match_string(scanner,"in")) >= SYNCTEX_STATUS_OK) { + if ((status = _synctex_match_string(scanner,"in")) >= SYNCTEX_STATUS_OK) { f *= 72.27f*65536; - } else if(status<SYNCTEX_STATUS_EOF) { + } else if (status<SYNCTEX_STATUS_EOF) { report_unit_error: _synctex_error("problem with unit."); return status; - } else if((status = _synctex_match_string(scanner,"cm")) >= SYNCTEX_STATUS_OK) { + } else if ((status = _synctex_match_string(scanner,"cm")) >= SYNCTEX_STATUS_OK) { f *= 72.27f*65536/2.54f; - } else if(status<0) { + } else if (status<0) { goto report_unit_error; - } else if((status = _synctex_match_string(scanner,"mm")) >= SYNCTEX_STATUS_OK) { + } else if ((status = _synctex_match_string(scanner,"mm")) >= SYNCTEX_STATUS_OK) { f *= 72.27f*65536/25.4f; - } else if(status<0) { + } else if (status<0) { goto report_unit_error; - } else if((status = _synctex_match_string(scanner,"pt")) >= SYNCTEX_STATUS_OK) { + } else if ((status = _synctex_match_string(scanner,"pt")) >= SYNCTEX_STATUS_OK) { f *= 65536.0f; - } else if(status<0) { + } else if (status<0) { goto report_unit_error; - } else if((status = _synctex_match_string(scanner,"bp")) >= SYNCTEX_STATUS_OK) { + } else if ((status = _synctex_match_string(scanner,"bp")) >= SYNCTEX_STATUS_OK) { f *= 72.27f/72*65536.0f; - } else if(status<0) { + } else if (status<0) { goto report_unit_error; - } else if((status = _synctex_match_string(scanner,"pc")) >= SYNCTEX_STATUS_OK) { + } else if ((status = _synctex_match_string(scanner,"pc")) >= SYNCTEX_STATUS_OK) { f *= 12.0*65536.0f; - } else if(status<0) { + } else if (status<0) { goto report_unit_error; - } else if((status = _synctex_match_string(scanner,"sp")) >= SYNCTEX_STATUS_OK) { + } else if ((status = _synctex_match_string(scanner,"sp")) >= SYNCTEX_STATUS_OK) { f *= 1.0f; - } else if(status<0) { + } else if (status<0) { goto report_unit_error; - } else if((status = _synctex_match_string(scanner,"dd")) >= SYNCTEX_STATUS_OK) { + } else if ((status = _synctex_match_string(scanner,"dd")) >= SYNCTEX_STATUS_OK) { f *= 1238.0f/1157*65536.0f; - } else if(status<0) { + } else if (status<0) { goto report_unit_error; - } else if((status = _synctex_match_string(scanner,"cc")) >= SYNCTEX_STATUS_OK) { + } else if ((status = _synctex_match_string(scanner,"cc")) >= SYNCTEX_STATUS_OK) { f *= 14856.0f/1157*65536; - } else if(status<0) { + } else if (status<0) { goto report_unit_error; - } else if((status = _synctex_match_string(scanner,"nd")) >= SYNCTEX_STATUS_OK) { + } else if ((status = _synctex_match_string(scanner,"nd")) >= SYNCTEX_STATUS_OK) { f *= 685.0f/642*65536; - } else if(status<0) { + } else if (status<0) { goto report_unit_error; - } else if((status = _synctex_match_string(scanner,"nc")) >= SYNCTEX_STATUS_OK) { + } else if ((status = _synctex_match_string(scanner,"nc")) >= SYNCTEX_STATUS_OK) { f *= 1370.0f/107*65536; - } else if(status<0) { + } else if (status<0) { goto report_unit_error; } *value_ref = f; @@ -1692,24 +1695,24 @@ * a negative error is returned otherwise */ synctex_status_t _synctex_scan_post_scriptum(synctex_scanner_t scanner) { synctex_status_t status = 0; - unsigned char * endptr = NULL; + char * endptr = NULL; #ifdef HAVE_SETLOCALE char * loc = setlocale(LC_NUMERIC, NULL); #endif - if(NULL == scanner) { + if (NULL == scanner) { return SYNCTEX_STATUS_BAD_ARGUMENT; } /* Scan the file until a post scriptum line is found */ post_scriptum_not_found: status = _synctex_match_string(scanner,"Post scriptum:"); - if(status<SYNCTEX_STATUS_NOT_OK) { + if (status<SYNCTEX_STATUS_NOT_OK) { return status; } - if(status == SYNCTEX_STATUS_NOT_OK) { + if (status == SYNCTEX_STATUS_NOT_OK) { status = _synctex_next_line(scanner); - if(status<SYNCTEX_STATUS_EOF) { + if (status<SYNCTEX_STATUS_EOF) { return status; - } else if(status<SYNCTEX_STATUS_OK) { + } else if (status<SYNCTEX_STATUS_OK) { return SYNCTEX_STATUS_OK;/* The EOF is found, we have properly scanned the file */ } goto post_scriptum_not_found; @@ -1717,57 +1720,57 @@ /* We found the name, advance to the next line. */ next_line: status = _synctex_next_line(scanner); - if(status<SYNCTEX_STATUS_EOF) { + if (status<SYNCTEX_STATUS_EOF) { return status; - } else if(status<SYNCTEX_STATUS_OK) { + } else if (status<SYNCTEX_STATUS_OK) { return SYNCTEX_STATUS_OK;/* The EOF is found, we have properly scanned the file */ } /* Scanning the information */ status = _synctex_match_string(scanner,"Magnification:"); - if(status == SYNCTEX_STATUS_OK ) { + if (status == SYNCTEX_STATUS_OK ) { #ifdef HAVE_SETLOCALE setlocale(LC_NUMERIC, "C"); #endif - scanner->unit = strtod((char *)SYNCTEX_CUR,(char **)&endptr); + scanner->unit = strtod(SYNCTEX_CUR,&endptr); #ifdef HAVE_SETLOCALE setlocale(LC_NUMERIC, loc); #endif - if(endptr == SYNCTEX_CUR) { + if (endptr == SYNCTEX_CUR) { _synctex_error("bad magnification in the post scriptum, a float was expected."); return SYNCTEX_STATUS_ERROR; } - if(scanner->unit<=0) { + if (scanner->unit<=0) { _synctex_error("bad magnification in the post scriptum, a positive float was expected."); return SYNCTEX_STATUS_ERROR; } SYNCTEX_CUR = endptr; goto next_line; } - if(status<SYNCTEX_STATUS_EOF){ + if (status<SYNCTEX_STATUS_EOF){ report_record_problem: _synctex_error("Problem reading the Post Scriptum records"); return status; /* echo the error. */ } status = _synctex_match_string(scanner,"X Offset:"); - if(status == SYNCTEX_STATUS_OK) { + if (status == SYNCTEX_STATUS_OK) { status = _synctex_scan_float_and_dimension(scanner, &(scanner->x_offset)); - if(status<SYNCTEX_STATUS_OK) { + if (status<SYNCTEX_STATUS_OK) { _synctex_error("problem with X offset in the Post Scriptum."); return status; } goto next_line; - } else if(status<SYNCTEX_STATUS_EOF){ + } else if (status<SYNCTEX_STATUS_EOF){ goto report_record_problem; } status = _synctex_match_string(scanner,"Y Offset:"); - if(status==SYNCTEX_STATUS_OK) { + if (status==SYNCTEX_STATUS_OK) { status = _synctex_scan_float_and_dimension(scanner, &(scanner->y_offset)); - if(status<SYNCTEX_STATUS_OK) { + if (status<SYNCTEX_STATUS_OK) { _synctex_error("problem with Y offset in the Post Scriptum."); return status; } goto next_line; - } else if(status<SYNCTEX_STATUS_EOF){ + } else if (status<SYNCTEX_STATUS_EOF){ goto report_record_problem; } goto next_line; @@ -1780,24 +1783,24 @@ */ int _synctex_scan_postamble(synctex_scanner_t scanner) { int status = 0; - if(NULL == scanner) { + if (NULL == scanner) { return SYNCTEX_STATUS_BAD_ARGUMENT; } status = _synctex_match_string(scanner,"Postamble:"); - if(status < SYNCTEX_STATUS_OK) { + if (status < SYNCTEX_STATUS_OK) { return status; } count_again: status = _synctex_next_line(scanner); - if(status < SYNCTEX_STATUS_OK) { + if (status < SYNCTEX_STATUS_OK) { return status; } status = _synctex_scan_named(scanner,"Count:",&(scanner->count),(synctex_decoder_t)&_synctex_decode_int); - if(status < SYNCTEX_STATUS_EOF) { + if (status < SYNCTEX_STATUS_EOF) { return status; /* forward the error */ - } else if(status < SYNCTEX_STATUS_OK) { /* No Count record found */ + } else if (status < SYNCTEX_STATUS_OK) { /* No Count record found */ status = _synctex_next_line(scanner); /* Advance one more line */ - if(status<SYNCTEX_STATUS_OK) { + if (status<SYNCTEX_STATUS_OK) { return status; } goto count_again; @@ -1812,10 +1815,10 @@ * At creation time, the visible size is set to the values of the real size. */ synctex_status_t _synctex_setup_visible_box(synctex_node_t box) { - if(box) { + if (box) { switch(box->class->type) { case synctex_node_type_hbox: - if(SYNCTEX_INFO(box) != NULL) { + if (SYNCTEX_INFO(box) != NULL) { SYNCTEX_HORIZ_V(box) = SYNCTEX_HORIZ(box); SYNCTEX_VERT_V(box) = SYNCTEX_VERT(box); SYNCTEX_WIDTH_V(box) = SYNCTEX_WIDTH(box); @@ -1838,31 +1841,89 @@ # pragma unused(v) # endif int itsBtm, itsTop; - if(NULL == node || node->class->type != synctex_node_type_hbox) { + if (NULL == node || node->class->type != synctex_node_type_hbox) { return SYNCTEX_STATUS_BAD_ARGUMENT; } - if(SYNCTEX_WIDTH_V(node)<0) { + if (SYNCTEX_WIDTH_V(node)<0) { itsBtm = SYNCTEX_HORIZ_V(node); itsTop = SYNCTEX_HORIZ_V(node)-SYNCTEX_WIDTH_V(node); - if(h<itsBtm) { + if (h<itsBtm) { SYNCTEX_HORIZ_V(node) = h; SYNCTEX_WIDTH_V(node) = SYNCTEX_HORIZ_V(node) - itsTop; - } else if(h>itsTop) { + } else if (h>itsTop) { SYNCTEX_WIDTH_V(node) = SYNCTEX_HORIZ_V(node) - h; } } else { itsBtm = SYNCTEX_HORIZ_V(node); itsTop = SYNCTEX_HORIZ_V(node)+SYNCTEX_WIDTH_V(node); - if(h<itsBtm) { + if (h<itsBtm) { SYNCTEX_HORIZ_V(node) = h; SYNCTEX_WIDTH_V(node) = itsTop - SYNCTEX_HORIZ_V(node); - } else if(h>itsTop) { + } else if (h>itsTop) { SYNCTEX_WIDTH_V(node) = h - SYNCTEX_HORIZ_V(node); } } return SYNCTEX_STATUS_OK; } +/* Here are the control characters that strat each line of the synctex output file. + * Their values define the meaning of the line. + */ +# define SYNCTEX_CHAR_BEGIN_SHEET '{' +# define SYNCTEX_CHAR_END_SHEET '}' +# define SYNCTEX_CHAR_BEGIN_VBOX '[' +# define SYNCTEX_CHAR_END_VBOX ']' +# define SYNCTEX_CHAR_BEGIN_HBOX '(' +# define SYNCTEX_CHAR_END_HBOX ')' +# define SYNCTEX_CHAR_ANCHOR '!' +# define SYNCTEX_CHAR_VOID_VBOX 'v' +# define SYNCTEX_CHAR_VOID_HBOX 'h' +# define SYNCTEX_CHAR_KERN 'k' +# define SYNCTEX_CHAR_GLUE 'g' +# define SYNCTEX_CHAR_MATH '$' +# define SYNCTEX_CHAR_BOUNDARY 'x' + +# define SYNCTEX_RETURN(STATUS) return STATUS; + +/* Used when parsing the synctex file. A '{' character has just been parsed. + * The purpose is to gobble everything until the closing '}'. + * Actually only one nesting depth has been observed when using the clip option + * of \includegraphics option. Here we use arbitrary level of depth. + */ +synctex_status_t _synctex_scan_nested_sheet(synctex_scanner_t scanner) { + unsigned int depth = 0; +deeper: + ++depth; + if (_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) { + _synctex_error("Unexpected end of nested sheet (1)."); + SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR); + } +scan_next_line: + if (SYNCTEX_CUR<SYNCTEX_END) { + if (*SYNCTEX_CUR == SYNCTEX_CHAR_END_SHEET) { + ++SYNCTEX_CUR; + if (_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) { + _synctex_error("Unexpected end of nested sheet (2)."); + SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR); + } + if (--depth>0) { + goto scan_next_line; + } else { + SYNCTEX_RETURN(SYNCTEX_STATUS_OK); + } + } else if (*SYNCTEX_CUR == SYNCTEX_CHAR_BEGIN_SHEET) { + ++SYNCTEX_CUR; + goto deeper; + + } else if (_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) { + _synctex_error("Unexpected end of nested sheet (3)."); + SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR); + } + } + _synctex_error("Unexpected end of nested sheet (4)."); + SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR); +} + /* Used when parsing the synctex file. * The sheet argument is a newly created sheet node that will hold the contents. * Something is returned in case of error. @@ -1876,19 +1937,19 @@ synctex_info_t * info = NULL; synctex_status_t status = 0; size_t available = 0; - if((NULL == scanner) || (NULL == sheet)) { + if ((NULL == scanner) || (NULL == sheet)) { return SYNCTEX_STATUS_BAD_ARGUMENT; } /* We MUST start with a box, so at this level, the unique possibility is '[', '(' or "}". */ prepare_loop: - if(SYNCTEX_CUR<SYNCTEX_END) { - if(*SYNCTEX_CUR == '[') { + if (SYNCTEX_CUR<SYNCTEX_END) { + if (*SYNCTEX_CUR == SYNCTEX_CHAR_BEGIN_VBOX) { scan_vbox: ++SYNCTEX_CUR; - if((child = _synctex_new_vbox(scanner)) && (info = SYNCTEX_INFO(child))) { + if ((child = _synctex_new_vbox(scanner)) && (info = SYNCTEX_INFO(child))) { # define SYNCTEX_DECODE_FAILED(WHAT) \ (_synctex_decode_int(scanner,&(info[WHAT].INT))<SYNCTEX_STATUS_OK) - if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX) + if (SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX) @@ -1897,7 +1958,6 @@ || SYNCTEX_DECODE_FAILED(SYNCTEX_DEPTH_IDX) || _synctex_next_line(scanner)<SYNCTEX_STATUS_OK) { _synctex_error("Bad vbox record."); - #define SYNCTEX_RETURN(STATUS) return STATUS; SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR); } SYNCTEX_SET_CHILD(parent,child); @@ -1908,11 +1968,11 @@ _synctex_error("Can't create vbox record."); SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR); } - } else if(*SYNCTEX_CUR == '(') { + } else if (*SYNCTEX_CUR == SYNCTEX_CHAR_BEGIN_HBOX) { scan_hbox: ++SYNCTEX_CUR; - if((child = _synctex_new_hbox(scanner)) && (info = SYNCTEX_INFO(child))) { - if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX) + if ((child = _synctex_new_hbox(scanner)) && (info = SYNCTEX_INFO(child))) { + if (SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX) @@ -1934,19 +1994,27 @@ _synctex_error("Can't create hbox record."); SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR); } - } else if(*SYNCTEX_CUR == '}') { + } else if (*SYNCTEX_CUR == SYNCTEX_CHAR_END_SHEET) { scan_teehs: ++SYNCTEX_CUR; - if(NULL == parent || parent->class->type != synctex_node_type_sheet + if (NULL == parent || parent->class->type != synctex_node_type_sheet || _synctex_next_line(scanner)<SYNCTEX_STATUS_OK) { _synctex_error("Unexpected end of sheet."); SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR); } SYNCTEX_RETURN(SYNCTEX_STATUS_OK); - } else if(*SYNCTEX_CUR == '!') { + } else if (*SYNCTEX_CUR == SYNCTEX_CHAR_BEGIN_SHEET) { + /* Addendum to version 1.10 to manage nested sheets */ + ++SYNCTEX_CUR; + if (_synctex_scan_nested_sheet(scanner)<SYNCTEX_STATUS_OK) { + _synctex_error("Unexpected nested sheet."); + SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR); + } + goto prepare_loop; + } else if (*SYNCTEX_CUR == SYNCTEX_CHAR_ANCHOR) { scan_anchor: ++SYNCTEX_CUR; - if(_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) { + if (_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) { _synctex_error("Missing anchor."); SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR); } @@ -1954,7 +2022,7 @@ } else { /* _synctex_error("Ignored record %c\n",*SYNCTEX_CUR); */ ++SYNCTEX_CUR; - if(_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) { + if (_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) { _synctex_error("Unexpected end."); SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR); } @@ -1963,7 +2031,7 @@ } else { available = 1; status = _synctex_buffer_get_available_size(scanner,&available); - if(status<SYNCTEX_STATUS_OK && available>0){ + if (status<SYNCTEX_STATUS_OK && available>0){ _synctex_error("Uncomplete sheet(0)"); SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR); } else { @@ -1974,38 +2042,38 @@ /* The child loop means that we go do one level, when we just created a box node, * the next node created is a child of this box. */ child_loop: - if(SYNCTEX_CUR<SYNCTEX_END) { - if(*SYNCTEX_CUR == '[') { + if (SYNCTEX_CUR<SYNCTEX_END) { + if (*SYNCTEX_CUR == SYNCTEX_CHAR_BEGIN_VBOX) { goto scan_vbox; - } else if(*SYNCTEX_CUR == ']') { + } else if (*SYNCTEX_CUR == SYNCTEX_CHAR_END_VBOX) { scan_xobv: ++SYNCTEX_CUR; - if(NULL != parent && parent->class->type == synctex_node_type_vbox) { + if (NULL != parent && parent->class->type == synctex_node_type_vbox) { #define SYNCTEX_UPDATE_BOX_FRIEND(NODE)\ friend_index = ((SYNCTEX_INFO(NODE))[SYNCTEX_TAG_IDX].INT+(SYNCTEX_INFO(NODE))[SYNCTEX_LINE_IDX].INT)%(scanner->number_of_lists);\ SYNCTEX_SET_FRIEND(NODE,(scanner->lists_of_friends)[friend_index]);\ (scanner->lists_of_friends)[friend_index] = NODE; - if(NULL == SYNCTEX_CHILD(parent)) { + if (NULL == SYNCTEX_CHILD(parent)) { /* only void boxes are friends */ SYNCTEX_UPDATE_BOX_FRIEND(parent); } child = parent; parent = SYNCTEX_PARENT(child); } else { - _synctex_error("Unexpected ']', ignored."); + _synctex_error("Unexpected end of vbox, ignored."); } - if(_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) { + if (_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) { _synctex_error("Uncomplete sheet."); SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR); } goto sibling_loop; - } else if(*SYNCTEX_CUR == '(') { + } else if (*SYNCTEX_CUR == SYNCTEX_CHAR_BEGIN_HBOX) { goto scan_hbox; - } else if(*SYNCTEX_CUR == ')') { + } else if (*SYNCTEX_CUR == SYNCTEX_CHAR_END_HBOX) { scan_xobh: ++SYNCTEX_CUR; - if((parent) && parent->class->type == synctex_node_type_hbox) { - if(NULL == child) { + if ((parent) && parent->class->type == synctex_node_type_hbox) { + if (NULL == child) { /* Only boxes with no children are friends, * boxes with children are indirectly friends through one of their descendants. */ SYNCTEX_UPDATE_BOX_FRIEND(parent); @@ -2016,18 +2084,18 @@ child = parent; parent = SYNCTEX_PARENT(child); } else { - _synctex_error("Unexpected ')', ignored."); + _synctex_error("Unexpected enf of hbox, ignored."); } - if(_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) { + if (_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) { _synctex_error("Uncomplete sheet."); SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR); } goto sibling_loop; - } else if(*SYNCTEX_CUR == 'v') { + } else if (*SYNCTEX_CUR == SYNCTEX_CHAR_VOID_VBOX) { ++SYNCTEX_CUR; - if(NULL != (child = _synctex_new_void_vbox(scanner)) + if (NULL != (child = _synctex_new_void_vbox(scanner)) && NULL != (info = SYNCTEX_INFO(child))) { - if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX) + if (SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX) @@ -2049,11 +2117,11 @@ _synctex_error("Can't create vbox record."); SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR); } - } else if(*SYNCTEX_CUR == 'h') { + } else if (*SYNCTEX_CUR == SYNCTEX_CHAR_VOID_HBOX) { ++SYNCTEX_CUR; - if(NULL != (child = _synctex_new_void_hbox(scanner)) + if (NULL != (child = _synctex_new_void_hbox(scanner)) && NULL != (info = SYNCTEX_INFO(child))) { - if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX) + if (SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX) @@ -2073,11 +2141,11 @@ _synctex_error("Can't create void hbox record."); SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR); } - } else if(*SYNCTEX_CUR == 'k') { + } else if (*SYNCTEX_CUR == SYNCTEX_CHAR_KERN) { ++SYNCTEX_CUR; - if(NULL != (child = _synctex_new_kern(scanner)) + if (NULL != (child = _synctex_new_kern(scanner)) && NULL != (info = SYNCTEX_INFO(child))) { - if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX) + if (SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX) @@ -2095,11 +2163,11 @@ _synctex_error("Can't create kern record."); SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR); } - } else if(*SYNCTEX_CUR == 'g') { + } else if (*SYNCTEX_CUR == SYNCTEX_CHAR_GLUE) { ++SYNCTEX_CUR; - if(NULL != (child = _synctex_new_glue(scanner)) + if (NULL != (child = _synctex_new_glue(scanner)) && NULL != (info = SYNCTEX_INFO(child))) { - if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX) + if (SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX) @@ -2115,11 +2183,11 @@ _synctex_error("Can't create glue record."); SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR); } - } else if(*SYNCTEX_CUR == '$') { + } else if (*SYNCTEX_CUR == SYNCTEX_CHAR_MATH) { ++SYNCTEX_CUR; - if(NULL != (child = _synctex_new_math(scanner)) + if (NULL != (child = _synctex_new_math(scanner)) && NULL != (info = SYNCTEX_INFO(child))) { - if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX) + if (SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX) @@ -2135,11 +2203,11 @@ _synctex_error("Can't create math record."); SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR); } - } else if(*SYNCTEX_CUR == 'x') { + } else if (*SYNCTEX_CUR == SYNCTEX_CHAR_BOUNDARY) { ++SYNCTEX_CUR; - if(NULL != (child = _synctex_new_boundary(scanner)) + if (NULL != (child = _synctex_new_boundary(scanner)) && NULL != (info = SYNCTEX_INFO(child))) { - if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX) + if (SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX) @@ -2155,14 +2223,22 @@ _synctex_error("Can't create math record."); SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR); } - } else if(*SYNCTEX_CUR == '}') { + } else if (*SYNCTEX_CUR == SYNCTEX_CHAR_END_SHEET) { goto scan_teehs; - } else if(*SYNCTEX_CUR == '!') { + } else if (*SYNCTEX_CUR == SYNCTEX_CHAR_BEGIN_SHEET) { + /* Addendum to version 1.10 to manage nested sheets */ + ++SYNCTEX_CUR; + if (_synctex_scan_nested_sheet(scanner)<SYNCTEX_STATUS_OK) { + _synctex_error("Unexpected nested sheet."); + SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR); + } + goto child_loop; + } else if (*SYNCTEX_CUR == SYNCTEX_CHAR_ANCHOR) { goto scan_anchor; } else { /* _synctex_error("Ignored record %c\n",*SYNCTEX_CUR); */ ++SYNCTEX_CUR; - if(_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) { + if (_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) { _synctex_error("Unexpected end."); SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR); } @@ -2171,7 +2247,7 @@ } else { available = 1; status = _synctex_buffer_get_available_size(scanner,&available); - if(status<SYNCTEX_STATUS_OK && available>0){ + if (status<SYNCTEX_STATUS_OK && available>0){ _synctex_error("Uncomplete sheet(0)"); SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR); } else { @@ -2182,12 +2258,12 @@ /* The vertical loop means that we are on the same level, for example when we just ended a box. * If a node is created now, it will be a sibling of the current node, sharing the same parent. */ sibling_loop: - if(SYNCTEX_CUR<SYNCTEX_END) { - if(*SYNCTEX_CUR == '[') { + if (SYNCTEX_CUR<SYNCTEX_END) { + if (*SYNCTEX_CUR == SYNCTEX_CHAR_BEGIN_VBOX) { ++SYNCTEX_CUR; - if(NULL != (sibling = _synctex_new_vbox(scanner)) + if (NULL != (sibling = _synctex_new_vbox(scanner)) && NULL != (info = SYNCTEX_INFO(sibling))) { - if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX) + if (SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX) @@ -2206,13 +2282,13 @@ _synctex_error("Can't create vbox record (2)."); SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR); } - } else if(*SYNCTEX_CUR == ']') { + } else if (*SYNCTEX_CUR == SYNCTEX_CHAR_END_VBOX) { goto scan_xobv; - } else if(*SYNCTEX_CUR == '(') { + } else if (*SYNCTEX_CUR == SYNCTEX_CHAR_BEGIN_HBOX) { ++SYNCTEX_CUR; - if(NULL != (sibling = _synctex_new_hbox(scanner)) && + if (NULL != (sibling = _synctex_new_hbox(scanner)) && NULL != (info = SYNCTEX_INFO(sibling))) { - if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX) + if (SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX) @@ -2235,13 +2311,13 @@ _synctex_error("Can't create hbox record (2)."); SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR); } - } else if(*SYNCTEX_CUR == ')') { + } else if (*SYNCTEX_CUR == SYNCTEX_CHAR_END_HBOX) { goto scan_xobh; - } else if(*SYNCTEX_CUR == 'v') { + } else if (*SYNCTEX_CUR == SYNCTEX_CHAR_VOID_VBOX) { ++SYNCTEX_CUR; - if(NULL != (sibling = _synctex_new_void_vbox(scanner)) && + if (NULL != (sibling = _synctex_new_void_vbox(scanner)) && NULL != (info = SYNCTEX_INFO(sibling))) { - if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX) + if (SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX) @@ -2260,11 +2336,11 @@ _synctex_error("can't create void vbox record (2)."); SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR); } - } else if(*SYNCTEX_CUR == 'h') { + } else if (*SYNCTEX_CUR == SYNCTEX_CHAR_VOID_HBOX) { ++SYNCTEX_CUR; - if(NULL != (sibling = _synctex_new_void_hbox(scanner)) && + if (NULL != (sibling = _synctex_new_void_hbox(scanner)) && NULL != (info = SYNCTEX_INFO(sibling))) { - if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX) + if (SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX) @@ -2285,11 +2361,11 @@ _synctex_error("can't create void hbox record (2)."); SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR); } - } else if(*SYNCTEX_CUR == 'k') { + } else if (*SYNCTEX_CUR == SYNCTEX_CHAR_KERN) { ++SYNCTEX_CUR; - if(NULL != (sibling = _synctex_new_kern(scanner)) + if (NULL != (sibling = _synctex_new_kern(scanner)) && NULL != (info = SYNCTEX_INFO(sibling))) { - if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX) + if (SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX) @@ -2308,11 +2384,11 @@ _synctex_error("Can't create kern record (2)."); SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR); } - } else if(*SYNCTEX_CUR == 'g') { + } else if (*SYNCTEX_CUR == SYNCTEX_CHAR_GLUE) { ++SYNCTEX_CUR; - if(NULL != (sibling = _synctex_new_glue(scanner)) + if (NULL != (sibling = _synctex_new_glue(scanner)) && NULL != (info = SYNCTEX_INFO(sibling))) { - if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX) + if (SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX) @@ -2329,11 +2405,11 @@ _synctex_error("Can't create glue record (2)."); SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR); } - } else if(*SYNCTEX_CUR == '$') { + } else if (*SYNCTEX_CUR == SYNCTEX_CHAR_MATH) { ++SYNCTEX_CUR; - if(NULL != (sibling = _synctex_new_math(scanner)) + if (NULL != (sibling = _synctex_new_math(scanner)) && NULL != (info = SYNCTEX_INFO(sibling))) { - if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX) + if (SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX) @@ -2350,11 +2426,11 @@ _synctex_error("Can't create math record (2)."); SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR); } - } else if(*SYNCTEX_CUR == 'x') { + } else if (*SYNCTEX_CUR == SYNCTEX_CHAR_BOUNDARY) { ++SYNCTEX_CUR; - if(NULL != (sibling = _synctex_new_boundary(scanner)) + if (NULL != (sibling = _synctex_new_boundary(scanner)) && NULL != (info = SYNCTEX_INFO(sibling))) { - if(SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX) + if (SYNCTEX_DECODE_FAILED(SYNCTEX_TAG_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_LINE_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_HORIZ_IDX) || SYNCTEX_DECODE_FAILED(SYNCTEX_VERT_IDX) @@ -2371,11 +2447,11 @@ _synctex_error("Can't create boundary record (2)."); SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR); } - } else if(*SYNCTEX_CUR == '}') { + } else if (*SYNCTEX_CUR == SYNCTEX_CHAR_END_SHEET) { goto scan_teehs; - } else if(*SYNCTEX_CUR == '!') { + } else if (*SYNCTEX_CUR == SYNCTEX_CHAR_ANCHOR) { ++SYNCTEX_CUR; - if(_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) { + if (_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) { _synctex_error("Missing anchor (2)."); SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR); } @@ -2383,7 +2459,7 @@ } else { ++SYNCTEX_CUR; /* _synctex_error("Ignored record %c(2)\n",*SYNCTEX_CUR); */ - if(_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) { + if (_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) { SYNCTEX_RETURN(SYNCTEX_STATUS_ERROR); } goto sibling_loop; @@ -2391,7 +2467,7 @@ } else { available = 1; status = _synctex_buffer_get_available_size(scanner,&available); - if(status<SYNCTEX_STATUS_OK && available>0){ + if (status<SYNCTEX_STATUS_OK && available>0){ goto sibling_loop; } else { _synctex_error("Uncomplete sheet(2)"); @@ -2406,14 +2482,14 @@ synctex_status_t _synctex_scan_content(synctex_scanner_t scanner) { synctex_node_t sheet = NULL; synctex_status_t status = 0; - if(NULL == scanner) { + if (NULL == scanner) { return SYNCTEX_STATUS_BAD_ARGUMENT; } /* set up the lists of friends */ - if(NULL == scanner->lists_of_friends) { + if (NULL == scanner->lists_of_friends) { scanner->number_of_lists = 1024; scanner->lists_of_friends = (synctex_node_t *)_synctex_malloc(scanner->number_of_lists*sizeof(synctex_node_t)); - if(NULL == scanner->lists_of_friends) { + if (NULL == scanner->lists_of_friends) { _synctex_error("malloc:2"); return SYNCTEX_STATUS_ERROR; } @@ -2421,26 +2497,26 @@ /* Find where this section starts */ content_not_found: status = _synctex_match_string(scanner,"Content:"); - if(status<SYNCTEX_STATUS_EOF) { + if (status<SYNCTEX_STATUS_EOF) { return status; } - if(_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) { + if (_synctex_next_line(scanner)<SYNCTEX_STATUS_OK) { _synctex_error("Uncomplete Content."); return SYNCTEX_STATUS_ERROR; } - if(status == SYNCTEX_STATUS_NOT_OK) { + if (status == SYNCTEX_STATUS_NOT_OK) { goto content_not_found; } next_sheet: - if(*SYNCTEX_CUR != '{') { + if (*SYNCTEX_CUR != SYNCTEX_CHAR_BEGIN_SHEET) { status = _synctex_scan_postamble(scanner); - if(status < SYNCTEX_STATUS_EOF) { + if (status < SYNCTEX_STATUS_EOF) { _synctex_error("Bad content."); return status; } - if(status<SYNCTEX_STATUS_OK) { + if (status<SYNCTEX_STATUS_OK) { status = _synctex_next_line(scanner); - if(status < SYNCTEX_STATUS_OK) { + if (status < SYNCTEX_STATUS_OK) { _synctex_error("Bad content."); return status; } @@ -2452,19 +2528,19 @@ /* Create a new sheet node */ sheet = _synctex_new_sheet(scanner); status = _synctex_decode_int(scanner,&(SYNCTEX_PAGE(sheet))); - if(status<SYNCTEX_STATUS_OK) { + if (status<SYNCTEX_STATUS_OK) { _synctex_error("Missing sheet number."); bail: SYNCTEX_FREE(sheet); return SYNCTEX_STATUS_ERROR; } status = _synctex_next_line(scanner); - if(status<SYNCTEX_STATUS_OK) { + if (status<SYNCTEX_STATUS_OK) { _synctex_error("Uncomplete file."); goto bail; } status = _synctex_scan_sheet(scanner,sheet); - if(status<SYNCTEX_STATUS_OK) { + if (status<SYNCTEX_STATUS_OK) { _synctex_error("Bad sheet content."); goto bail; } @@ -2474,7 +2550,7 @@ /* Now read the list of Inputs between 2 sheets. */ do { status = _synctex_scan_input(scanner); - if(status<SYNCTEX_STATUS_EOF) { + if (status<SYNCTEX_STATUS_EOF) { _synctex_error("Bad input section."); goto bail; } @@ -2490,39 +2566,39 @@ gzFile file = NULL; char * synctex = NULL; synctex_scanner_t scanner = NULL; - synctex_io_mode_t io_mode = synctex_io_mode_read; + synctex_io_mode_t io_mode = 0; /* Here we assume that int are smaller than void * */ - if(sizeof(int)>sizeof(void*)) { + if (sizeof(int)>sizeof(void*)) { _synctex_error("INTERNAL INCONSISTENCY: int's are unexpectedly bigger than pointers, bailing out."); return NULL; } /* We ensure that SYNCTEX_BUFFER_SIZE < UINT_MAX, I don't know if it makes sense... */ - if(SYNCTEX_BUFFER_SIZE >= UINT_MAX) { + if (SYNCTEX_BUFFER_SIZE >= UINT_MAX) { _synctex_error("SyncTeX BUG: Internal inconsistency, bad SYNCTEX_BUFFER_SIZE (1)"); return NULL; } /* for integers: */ - if(SYNCTEX_BUFFER_SIZE < SYNCTEX_BUFFER_MIN_SIZE) { + if (SYNCTEX_BUFFER_SIZE < SYNCTEX_BUFFER_MIN_SIZE) { _synctex_error("SyncTeX BUG: Internal inconsistency, bad SYNCTEX_BUFFER_SIZE (2)"); return NULL; } /* now open the synctex file */ - if(_synctex_open(output,build_directory,&synctex,&file,synctex_NO,&io_mode) || !file) { - if(_synctex_open(output,build_directory,&synctex,&file,synctex_YES,&io_mode) || !file) { + if (_synctex_open(output,build_directory,&synctex,&file,synctex_ADD_QUOTES,&io_mode) || !file) { + if (_synctex_open(output,build_directory,&synctex,&file,synctex_DONT_ADD_QUOTES,&io_mode) || !file) { return NULL; } } scanner = (synctex_scanner_t)_synctex_malloc(sizeof(_synctex_scanner_t)); - if(NULL == scanner) { + if (NULL == scanner) { _synctex_error("SyncTeX: malloc problem"); free(synctex); gzclose(file); return NULL; } /* make a private copy of output for the scanner */ - if(NULL == (scanner->output = (char *)malloc(strlen(output)+1))){ + if (NULL == (scanner->output = (char *)malloc(strlen(output)+1))){ _synctex_error("! synctex_scanner_new_with_output_file: Memory problem (2), scanner's output is not reliable."); - } else if(scanner->output != strcpy(scanner->output,output)) { + } else if (scanner->output != strcpy(scanner->output,output)) { _synctex_error("! synctex_scanner_new_with_output_file: Copy problem, scanner's output is not reliable."); } scanner->synctex = synctex;/* Now the scanner owns synctex */ @@ -2530,128 +2606,172 @@ return parse? synctex_scanner_parse(scanner):scanner; } -int __synctex_open(const char * output, char ** synctex_name_ref, gzFile * file_ref, synctex_bool_t add_quotes, synctex_io_mode_t * io_modeRef); +int __synctex_open(const char * output, char ** synctex_name_ref, gzFile * file_ref, synctex_bool_t add_quotes, synctex_io_mode_t * io_mode_ref); /* This functions opens the file at the "output" given location. - * It manages the problem of quoted filenames that appear with pdftex an filenames containing the space character. + * It manages the problem of quoted filenames that appear with pdftex and filenames containing the space character. * In TeXLive 2008, the synctex file created with pdftex did contain unexpected quotes. + * This function will remove them if possible. + * All the reference arguments will take a value on return. They must be non NULL. * 0 on success, non 0 on error. */ -int __synctex_open(const char * output, char ** synctex_name_ref, gzFile * file_ref, synctex_bool_t add_quotes, synctex_io_mode_t * io_modeRef) { -# define synctex_name (*synctex_name_ref) -# define the_file (*file_ref) -# define io_mode (*io_modeRef) - if(synctex_name_ref && file_ref) { - const char * mode = synctex_io_modes[io_mode]; +int __synctex_open(const char * output, char ** synctex_name_ref, gzFile * file_ref, synctex_bool_t add_quotes, synctex_io_mode_t * io_mode_ref) { + if (synctex_name_ref && file_ref && io_mode_ref) { + /* 1 local variables that uses dynamic memory */ + char * synctex_name = NULL; + gzFile the_file = NULL; + char * quoteless_synctex_name = NULL; size_t size = 0; + synctex_io_mode_t io_mode = *io_mode_ref; + const char * mode = _synctex_get_io_mode_name(io_mode); /* now create the synctex file name */ size = strlen(output)+strlen(synctex_suffix)+strlen(synctex_suffix_gz)+1; synctex_name = (char *)malloc(size); - if(NULL == synctex_name) { + if (NULL == synctex_name) { _synctex_error("! __synctex_open: Memory problem (1)\n"); return 1; } - /* we have reserved for synctex enough memory to copy output, both suffices and 2 quotes, + /* we have reserved for synctex enough memory to copy output (including its 2 eventual quotes), both suffices, * including the terminating character. size is free now. */ - if(synctex_name != strcpy(synctex_name,output)) { + if (synctex_name != strcpy(synctex_name,output)) { _synctex_error("! __synctex_open: Copy problem\n"); return_on_error: free(synctex_name); - synctex_name = NULL;/* Don't forget to reinitialize. */ - the_file = NULL; /* Here as well */ - io_mode &= ~synctex_compress_mode_gz;/* Here as well */ + free(quoteless_synctex_name); return 2; } /* remove the last path extension if any */ _synctex_strip_last_path_extension(synctex_name); - if(!strlen(synctex_name)) { + if (!strlen(synctex_name)) { goto return_on_error; } /* now insert quotes. */ - if(add_quotes) { + if (add_quotes) { char * quoted = NULL; - if(_synctex_copy_with_quoting_last_path_component(synctex_name,"ed,size) || (NULL == quoted)) { + if (_synctex_copy_with_quoting_last_path_component(synctex_name,"ed,size) || (NULL == quoted)) { /* There was an error or quoting does not make sense: */ goto return_on_error; } - free(synctex_name); + quoteless_synctex_name = synctex_name; synctex_name = quoted; } - /* Now add the first path extension. */ - if(synctex_name != strcat(synctex_name,synctex_suffix)){ + /* Now add to synctex_name the first path extension. */ + if (synctex_name != strcat(synctex_name,synctex_suffix)){ _synctex_error("! __synctex_open: Concatenation problem (can't add suffix '%s')\n",synctex_suffix); goto return_on_error; } - if(NULL == (the_file = gzopen(synctex_name,mode))) { + /* Add to quoteless_synctex_name as well, if relevant. */ + if (quoteless_synctex_name && (quoteless_synctex_name != strcat(quoteless_synctex_name,synctex_suffix))){ + free(quoteless_synctex_name); + quoteless_synctex_name = NULL; + } + if (NULL == (the_file = gzopen(synctex_name,mode))) { /* Could not open this file */ - if(errno != ENOENT) { - /* The file does exist, this is a lower lever error, I can't do anything. */ + if (errno != ENOENT) { + /* The file does exist, this is a lower level error, I can't do anything. */ _synctex_error("SyncTeX: could not open %s, error %i\n",synctex_name,errno); goto return_on_error; } - /* Try the compressed version */ - if(synctex_name != strcat(synctex_name,synctex_suffix_gz)){ + /* Apparently, there is no uncompressed synctex file. Try the compressed version */ + if (synctex_name != strcat(synctex_name,synctex_suffix_gz)){ _synctex_error("! __synctex_open: Concatenation problem (can't add suffix '%s')\n",synctex_suffix_gz); goto return_on_error; } - io_mode |= synctex_compress_mode_gz; - mode = synctex_io_modes[io_mode]; /* the file is a compressed and is a binary file, this caused errors on Windows */ - if(NULL == (the_file = gzopen(synctex_name,mode))) { + io_mode |= synctex_io_gz_mask; + mode = _synctex_get_io_mode_name(io_mode); /* the file is a compressed and is a binary file, this caused errors on Windows */ + /* Add the suffix to the quoteless_synctex_name as well. */ + if (quoteless_synctex_name && (quoteless_synctex_name != strcat(quoteless_synctex_name,synctex_suffix_gz))){ + free(quoteless_synctex_name); + quoteless_synctex_name = NULL; + } + if (NULL == (the_file = gzopen(synctex_name,mode))) { /* Could not open this file */ - if(errno != ENOENT) { - /* The file does exist, this is a lower lever error, I can't do anything. */ + if (errno != ENOENT) { + /* The file does exist, this is a lower level error, I can't do anything. */ _synctex_error("SyncTeX: could not open %s, error %i\n",synctex_name,errno); } goto return_on_error; } } + /* At this point, the file is properly open. + * If we are in the add_quotes mode, we change the file name by removing the quotes. */ + if (quoteless_synctex_name) { + gzclose(the_file); + if (rename(synctex_name,quoteless_synctex_name)) { + _synctex_error("SyncTeX: could not rename %s to %s, error %i\n",synctex_name,quoteless_synctex_name,errno); + /* We could not rename, reopen the file with the quoted name. */ + if (NULL == (the_file = gzopen(synctex_name,mode))) { + /* No luck, could not re open this file, something has happened meanwhile */ + if (errno != ENOENT) { + /* The file does not exist any more, it has certainly be removed somehow + * this is a lower level error, I can't do anything. */ + _synctex_error("SyncTeX: could not open again %s, error %i\n",synctex_name,errno); + } + goto return_on_error; + } + } else { + /* The file has been successfully renamed */ + if (NULL == (the_file = gzopen(quoteless_synctex_name,mode))) { + /* Could not open this file */ + if (errno != ENOENT) { + /* The file does exist, this is a lower level error, I can't do anything. */ + _synctex_error("SyncTeX: could not open renamed %s, error %i\n",quoteless_synctex_name,errno); + } + goto return_on_error; + } + /* The quote free file name should replace the old one:*/ + free(synctex_name); + synctex_name = quoteless_synctex_name; + quoteless_synctex_name = NULL; + } + } + /* The operation is successfull, return the arguments by value. */ + * file_ref = the_file; + * io_mode_ref = io_mode; + * synctex_name_ref = synctex_name; return 0; } return 3; /* Bad parameter. */ -# undef synctex_name -# undef the_file -# undef io_mode } -int _synctex_open(const char * output, const char * build_directory, char ** synctex_name_ref, gzFile * file_ref, synctex_bool_t add_quotes, synctex_io_mode_t * io_modeRef); - /* Opens the ouput file, taking into account the eventual build_directory. * 0 on success, non 0 on error. */ -int _synctex_open(const char * output, const char * build_directory, char ** synctex_name_ref, gzFile * file_ref, synctex_bool_t add_quotes, synctex_io_mode_t * io_modeRef) { +int _synctex_open(const char * output, const char * build_directory, char ** synctex_name_ref, gzFile * file_ref, synctex_bool_t add_quotes, synctex_io_mode_t * io_mode_ref) { # define synctex_name (*synctex_name_ref) # define the_file (*file_ref) - int result = __synctex_open(output,synctex_name_ref,file_ref,add_quotes,io_modeRef); - if((result || !*file_ref) && build_directory && strlen(build_directory)) { - char * build_output, *lpc; + int result = __synctex_open(output,synctex_name_ref,file_ref,add_quotes,io_mode_ref); + if ((result || !*file_ref) && build_directory && strlen(build_directory)) { + char * build_output; + const char *lpc; size_t size; synctex_bool_t is_absolute; build_output = NULL; lpc = _synctex_last_path_component(output); - size = strlen(build_directory)+strlen(lpc)+2; + size = strlen(build_directory)+strlen(lpc)+2; /* One for the '/' and one for the '\0'. */ is_absolute = _synctex_path_is_absolute(build_directory); - if(!is_absolute) { + if (!is_absolute) { size += strlen(output); } - if((build_output = (char *)malloc(size))) { - if(is_absolute) { + if ((build_output = (char *)malloc(size))) { + if (is_absolute) { build_output[0] = '\0'; } else { - if(build_output != strcpy(build_output,output)) { + if (build_output != strcpy(build_output,output)) { return -4; } - *(lpc+(build_output-output))='\0'; + build_output[lpc-output]='\0'; } - if(build_output == strcat(build_output,build_directory)) { + if (build_output == strcat(build_output,build_directory)) { /* Append a path separator if necessary. */ - if(!SYNCTEX_IS_PATH_SEPARATOR(build_output[strlen(build_directory)-1])) { - if(build_output != strcat(build_output,"/")) { + if (!SYNCTEX_IS_PATH_SEPARATOR(build_output[strlen(build_directory)-1])) { + if (build_output != strcat(build_output,"/")) { return -2; } } /* Append the last path component of the output. */ - if(build_output != strcat(build_output,lpc)) { + if (build_output != strcat(build_output,lpc)) { return -3; } - return __synctex_open(build_output,synctex_name_ref,file_ref,add_quotes,io_modeRef); + return __synctex_open(build_output,synctex_name_ref,file_ref,add_quotes,io_mode_ref); } } return -1; @@ -2664,10 +2784,10 @@ /* The scanner destructor */ void synctex_scanner_free(synctex_scanner_t scanner) { - if(NULL == scanner) { + if (NULL == scanner) { return; } - if(SYNCTEX_FILE) { + if (SYNCTEX_FILE) { gzclose(SYNCTEX_FILE); SYNCTEX_FILE = NULL; } @@ -2684,7 +2804,7 @@ /* Where the synctex scanner parses the contents of the file. */ synctex_scanner_t synctex_scanner_parse(synctex_scanner_t scanner) { synctex_status_t status = 0; - if(!scanner || scanner->flags.has_parsed) { + if (!scanner || scanner->flags.has_parsed) { return scanner; } scanner->flags.has_parsed=1; @@ -2714,8 +2834,8 @@ (scanner->class[synctex_node_type_math]).scanner = scanner; scanner->class[synctex_node_type_boundary] = synctex_class_boundary; (scanner->class[synctex_node_type_boundary]).scanner = scanner; - SYNCTEX_START = (unsigned char *)malloc(SYNCTEX_BUFFER_SIZE+1); /* one more character for null termination */ - if(NULL == SYNCTEX_START) { + SYNCTEX_START = (char *)malloc(SYNCTEX_BUFFER_SIZE+1); /* one more character for null termination */ + if (NULL == SYNCTEX_START) { _synctex_error("SyncTeX: malloc error"); synctex_scanner_free(scanner); return NULL; @@ -2727,14 +2847,14 @@ *SYNCTEX_END = '\0'; SYNCTEX_CUR = SYNCTEX_END; status = _synctex_scan_preamble(scanner); - if(status<SYNCTEX_STATUS_OK) { + if (status<SYNCTEX_STATUS_OK) { _synctex_error("SyncTeX Error: Bad preamble\n"); bailey: synctex_scanner_free(scanner); return NULL; } status = _synctex_scan_content(scanner); - if(status<SYNCTEX_STATUS_OK) { + if (status<SYNCTEX_STATUS_OK) { _synctex_error("SyncTeX Error: Bad content\n"); goto bailey; } @@ -2746,13 +2866,13 @@ /* Final tuning: set the default values for various parameters */ /* 1 pre_unit = (scanner->pre_unit)/65536 pt = (scanner->pre_unit)/65781.76 bp * 1 pt = 65536 sp */ - if(scanner->pre_unit<=0) { + if (scanner->pre_unit<=0) { scanner->pre_unit = 8192; } - if(scanner->pre_magnification<=0) { + if (scanner->pre_magnification<=0) { scanner->pre_magnification = 1000; } - if(scanner->unit <= 0) { + if (scanner->unit <= 0) { /* no post magnification */ scanner->unit = scanner->pre_unit / 65781.76;/* 65781.76 or 65536.0*/ } else { @@ -2760,7 +2880,7 @@ scanner->unit *= scanner->pre_unit / 65781.76; } scanner->unit *= scanner->pre_magnification / 1000.0; - if(scanner->x_offset > 6e23) { + if (scanner->x_offset > 6e23) { /* no post offset */ scanner->x_offset = scanner->pre_x_offset * (scanner->pre_unit / 65781.76); scanner->y_offset = scanner->pre_y_offset * (scanner->pre_unit / 65781.76); @@ -2791,7 +2911,7 @@ return scanner?scanner->unit:1; } void synctex_scanner_display(synctex_scanner_t scanner) { - if(NULL == scanner) { + if (NULL == scanner) { return; } printf("The scanner:\noutput:%s\noutput_fmt:%s\nversion:%i\n",scanner->output,scanner->output_fmt,scanner->version); @@ -2800,11 +2920,11 @@ scanner->count,scanner->unit,scanner->x_offset,scanner->y_offset); printf("The input:\n"); SYNCTEX_DISPLAY(scanner->input); - if(scanner->count<1000) { + if (scanner->count<1000) { printf("The sheets:\n"); SYNCTEX_DISPLAY(scanner->sheet); printf("The friends:\n"); - if(scanner->lists_of_friends) { + if (scanner->lists_of_friends) { int i = scanner->number_of_lists; synctex_node_t node; while(i--) { @@ -2827,12 +2947,12 @@ /* Public*/ const char * synctex_scanner_get_name(synctex_scanner_t scanner,int tag) { synctex_node_t input = NULL; - if(NULL == scanner) { + if (NULL == scanner) { return NULL; } input = scanner->input; do { - if(tag == SYNCTEX_TAG(input)) { + if (tag == SYNCTEX_TAG(input)) { return (SYNCTEX_NAME(input)); } } while((input = SYNCTEX_SIBLING(input)) != NULL); @@ -2842,12 +2962,12 @@ int _synctex_scanner_get_tag(synctex_scanner_t scanner,const char * name); int _synctex_scanner_get_tag(synctex_scanner_t scanner,const char * name) { synctex_node_t input = NULL; - if(NULL == scanner) { + if (NULL == scanner) { return 0; } input = scanner->input; do { - if(_synctex_is_equivalent_file_name(name,(SYNCTEX_NAME(input)))) { + if (_synctex_is_equivalent_file_name(name,(SYNCTEX_NAME(input)))) { return SYNCTEX_TAG(input); } } while((input = SYNCTEX_SIBLING(input)) != NULL); @@ -2856,13 +2976,13 @@ int synctex_scanner_get_tag(synctex_scanner_t scanner,const char * name) { size_t char_index = strlen(name); - if((scanner = synctex_scanner_parse(scanner)) && (0 < char_index)) { + if ((scanner = synctex_scanner_parse(scanner)) && (0 < char_index)) { /* the name is not void */ char_index -= 1; - if(!SYNCTEX_IS_PATH_SEPARATOR(name[char_index])) { + if (!SYNCTEX_IS_PATH_SEPARATOR(name[char_index])) { /* the last character of name is not a path separator */ int result = _synctex_scanner_get_tag(scanner,name); - if(result) { + if (result) { return result; } else { /* the given name was not the one known by TeX @@ -2876,20 +2996,20 @@ } /* Find the last path separator before relative */ while(relative > name) { - if(SYNCTEX_IS_PATH_SEPARATOR(*(relative-1))) { + if (SYNCTEX_IS_PATH_SEPARATOR(*(relative-1))) { break; } relative -= 1; } - if((relative > name) && (result = _synctex_scanner_get_tag(scanner,relative))) { + if ((relative > name) && (result = _synctex_scanner_get_tag(scanner,relative))) { return result; } - if(SYNCTEX_IS_PATH_SEPARATOR(name[0])) { + if (SYNCTEX_IS_PATH_SEPARATOR(name[0])) { /* No tag found for the given absolute name, * Try each relative path starting from the shortest one */ while(0<char_index) { char_index -= 1; - if(SYNCTEX_IS_PATH_SEPARATOR(name[char_index]) + if (SYNCTEX_IS_PATH_SEPARATOR(name[char_index]) && (result = _synctex_scanner_get_tag(scanner,name+char_index+1))) { return result; } @@ -2918,84 +3038,84 @@ # pragma mark Public node attributes # endif int synctex_node_h(synctex_node_t node){ - if(!node) { + if (!node) { return 0; } return SYNCTEX_HORIZ(node); } int synctex_node_v(synctex_node_t node){ - if(!node) { + if (!node) { return 0; } return SYNCTEX_VERT(node); } int synctex_node_width(synctex_node_t node){ - if(!node) { + if (!node) { return 0; } return SYNCTEX_WIDTH(node); } int synctex_node_box_h(synctex_node_t node){ - if(!node) { + if (!node) { return 0; } - if(SYNCTEX_IS_BOX(node)) { + if (SYNCTEX_IS_BOX(node)) { result: return SYNCTEX_HORIZ(node); } - if((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) { + if ((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) { goto result; } return 0; } int synctex_node_box_v(synctex_node_t node){ - if(!node) { + if (!node) { return 0; } - if(SYNCTEX_IS_BOX(node)) { + if (SYNCTEX_IS_BOX(node)) { result: return SYNCTEX_VERT(node); } - if((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) { + if ((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) { goto result; } return 0; } int synctex_node_box_width(synctex_node_t node){ - if(!node) { + if (!node) { return 0; } - if(SYNCTEX_IS_BOX(node)) { + if (SYNCTEX_IS_BOX(node)) { result: return SYNCTEX_WIDTH(node); } - if((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) { + if ((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) { goto result; } return 0; } int synctex_node_box_height(synctex_node_t node){ - if(!node) { + if (!node) { return 0; } - if(SYNCTEX_IS_BOX(node)) { + if (SYNCTEX_IS_BOX(node)) { result: return SYNCTEX_HEIGHT(node); } - if((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) { + if ((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) { goto result; } return 0; } int synctex_node_box_depth(synctex_node_t node){ - if(!node) { + if (!node) { return 0; } - if(SYNCTEX_IS_BOX(node)) { + if (SYNCTEX_IS_BOX(node)) { result: return SYNCTEX_DEPTH(node); } - if((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) { + if ((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) { goto result; } return 0; @@ -3005,25 +3125,25 @@ # pragma mark Public node visible attributes # endif float synctex_node_visible_h(synctex_node_t node){ - if(!node) { + if (!node) { return 0; } return SYNCTEX_HORIZ(node)*node->class->scanner->unit+node->class->scanner->x_offset; } float synctex_node_visible_v(synctex_node_t node){ - if(!node) { + if (!node) { return 0; } return SYNCTEX_VERT(node)*node->class->scanner->unit+node->class->scanner->y_offset; } float synctex_node_visible_width(synctex_node_t node){ - if(!node) { + if (!node) { return 0; } return SYNCTEX_WIDTH(node)*node->class->scanner->unit; } float synctex_node_box_visible_h(synctex_node_t node){ - if(!node) { + if (!node) { return 0; } switch(node->class->type) { @@ -3035,31 +3155,31 @@ result: return SYNCTEX_HORIZ_V(node)*node->class->scanner->unit+node->class->scanner->x_offset; } - if((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) { + if ((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) { goto result; } return 0; } float synctex_node_box_visible_v(synctex_node_t node){ - if(!node) { + if (!node) { return 0; } switch(node->class->type) { case synctex_node_type_vbox: case synctex_node_type_void_vbox: case synctex_node_type_void_hbox: - return SYNCTEX_VERT(node)*node->class->scanner->unit+node->class->scanner->x_offset; + return SYNCTEX_VERT(node)*node->class->scanner->unit+node->class->scanner->y_offset; case synctex_node_type_hbox: result: - return SYNCTEX_VERT_V(node)*node->class->scanner->unit+node->class->scanner->x_offset; + return SYNCTEX_VERT_V(node)*node->class->scanner->unit+node->class->scanner->y_offset; } - if((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) { + if ((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) { goto result; } return 0; } float synctex_node_box_visible_width(synctex_node_t node){ - if(!node) { + if (!node) { return 0; } switch(node->class->type) { @@ -3071,13 +3191,13 @@ result: return SYNCTEX_WIDTH_V(node)*node->class->scanner->unit; } - if((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) { + if ((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) { goto result; } return 0; } float synctex_node_box_visible_height(synctex_node_t node){ - if(!node) { + if (!node) { return 0; } switch(node->class->type) { @@ -3089,13 +3209,13 @@ result: return SYNCTEX_HEIGHT_V(node)*node->class->scanner->unit; } - if((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) { + if ((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) { goto result; } return 0; } float synctex_node_box_visible_depth(synctex_node_t node){ - if(!node) { + if (!node) { return 0; } switch(node->class->type) { @@ -3107,7 +3227,7 @@ result: return SYNCTEX_DEPTH_V(node)*node->class->scanner->unit; } - if((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) { + if ((node = SYNCTEX_PARENT(node)) && (node->class->type != synctex_node_type_sheet)) { goto result; } return 0; @@ -3119,7 +3239,7 @@ int synctex_node_page(synctex_node_t node){ synctex_node_t parent = NULL; - if(!node) { + if (!node) { return -1; } parent = SYNCTEX_PARENT(node); @@ -3127,7 +3247,7 @@ node = parent; parent = SYNCTEX_PARENT(node); } - if(node->class->type == synctex_node_type_sheet) { + if (node->class->type == synctex_node_type_sheet) { return SYNCTEX_PAGE(node); } return -1; @@ -3150,10 +3270,10 @@ # endif synctex_node_t synctex_sheet_content(synctex_scanner_t scanner,int page) { - if(scanner) { + if (scanner) { synctex_node_t sheet = scanner->sheet; while(sheet) { - if(page == SYNCTEX_PAGE(sheet)) { + if (page == SYNCTEX_PAGE(sheet)) { return SYNCTEX_CHILD(sheet); } sheet = SYNCTEX_SIBLING(sheet); @@ -3176,7 +3296,7 @@ int friend_index = 0; int max_line = 0; synctex_node_t node = NULL; - if(tag == 0) { + if (tag == 0) { printf("SyncTeX Warning: No tag for %s\n",name); return -1; } @@ -3186,12 +3306,12 @@ while(line<max_line) { /* This loop will only be performed once for advanced viewers */ friend_index = (tag+line)%(scanner->number_of_lists); - if((node = (scanner->lists_of_friends)[friend_index])) { + if ((node = (scanner->lists_of_friends)[friend_index])) { do { - if((synctex_node_type(node)>=synctex_node_type_boundary) + if ((synctex_node_type(node)>=synctex_node_type_boundary) && (tag == SYNCTEX_TAG(node)) && (line == SYNCTEX_LINE(node))) { - if(SYNCTEX_CUR == SYNCTEX_END) { + if (SYNCTEX_CUR == SYNCTEX_END) { size += 16; SYNCTEX_END = realloc(SYNCTEX_START,size*sizeof(synctex_node_t *)); SYNCTEX_CUR += SYNCTEX_END - SYNCTEX_START; @@ -3202,14 +3322,14 @@ SYNCTEX_CUR += sizeof(synctex_node_t); } } while((node = SYNCTEX_FRIEND(node))); - if(SYNCTEX_START == NULL) { + if (SYNCTEX_START == NULL) { /* We did not find any matching boundary, retry with glue or kern */ node = (scanner->lists_of_friends)[friend_index];/* no need to test it again, already done */ do { - if((synctex_node_type(node)>=synctex_node_type_kern) + if ((synctex_node_type(node)>=synctex_node_type_kern) && (tag == SYNCTEX_TAG(node)) && (line == SYNCTEX_LINE(node))) { - if(SYNCTEX_CUR == SYNCTEX_END) { + if (SYNCTEX_CUR == SYNCTEX_END) { size += 16; SYNCTEX_END = realloc(SYNCTEX_START,size*sizeof(synctex_node_t *)); SYNCTEX_CUR += SYNCTEX_END - SYNCTEX_START; @@ -3220,13 +3340,13 @@ SYNCTEX_CUR += sizeof(synctex_node_t); } } while((node = SYNCTEX_FRIEND(node))); - if(SYNCTEX_START == NULL) { + if (SYNCTEX_START == NULL) { /* We did not find any matching glue or kern, retry with boxes */ node = (scanner->lists_of_friends)[friend_index];/* no need to test it again, already done */ do { - if((tag == SYNCTEX_TAG(node)) + if ((tag == SYNCTEX_TAG(node)) && (line == SYNCTEX_LINE(node))) { - if(SYNCTEX_CUR == SYNCTEX_END) { + if (SYNCTEX_CUR == SYNCTEX_END) { size += 16; SYNCTEX_END = realloc(SYNCTEX_START,size*sizeof(synctex_node_t *)); SYNCTEX_CUR += SYNCTEX_END - SYNCTEX_START; @@ -3241,7 +3361,7 @@ } SYNCTEX_END = SYNCTEX_CUR; /* Now reverse the order to have nodes in display order, and keep just a few nodes */ - if((SYNCTEX_START) && (SYNCTEX_END)) + if ((SYNCTEX_START) && (SYNCTEX_END)) { synctex_node_t * start_ref = (synctex_node_t *)SYNCTEX_START; synctex_node_t * end_ref = (synctex_node_t *)SYNCTEX_END; @@ -3260,10 +3380,10 @@ end_ref = (synctex_node_t *)SYNCTEX_START; next_end: end_ref += 1; /* we allways have start_ref<= end_ref*/ - if(end_ref < (synctex_node_t *)SYNCTEX_END) { + if (end_ref < (synctex_node_t *)SYNCTEX_END) { node = *end_ref; while((node = SYNCTEX_PARENT(node))) { - if(SYNCTEX_PARENT(*start_ref) == node) { + if (SYNCTEX_PARENT(*start_ref) == node) { goto next_end; } } @@ -3272,10 +3392,12 @@ goto next_end; } start_ref += 1; - SYNCTEX_END = (unsigned char *)start_ref; - } + SYNCTEX_END = (char *)start_ref; + SYNCTEX_CUR = NULL;// added on behalf of Jose Alliste + return (SYNCTEX_END-SYNCTEX_START)/sizeof(synctex_node_t);// added on behalf Jan Sundermeyer + } SYNCTEX_CUR = NULL; - return (SYNCTEX_END-SYNCTEX_START)/sizeof(synctex_node_t); + // return (SYNCTEX_END-SYNCTEX_START)/sizeof(synctex_node_t); removed on behalf Jan Sundermeyer } # if defined(__SYNCTEX_STRONG_DISPLAY_QUERY__) break; @@ -3287,12 +3409,12 @@ } synctex_node_t synctex_next_result(synctex_scanner_t scanner) { - if(NULL == SYNCTEX_CUR) { + if (NULL == SYNCTEX_CUR) { SYNCTEX_CUR = SYNCTEX_START; } else { SYNCTEX_CUR+=sizeof(synctex_node_t); } - if(SYNCTEX_CUR<SYNCTEX_END) { + if (SYNCTEX_CUR<SYNCTEX_END) { return *(synctex_node_t*)SYNCTEX_CUR; } else { return NULL; @@ -3358,9 +3480,9 @@ synctex_node_t other_node = NULL; /* placeholder */ synctex_point_t hitPoint = {0,0}; /* placeholder */ synctex_node_set_t bestNodes = {NULL,NULL}; /* holds the best node */ - synctex_distances_t bestDistances = {INT_MAX,INT_MAX}; + synctex_distances_t bestDistances = {INT_MAX,INT_MAX}; /* holds the best distances for the best node */ synctex_node_t bestContainer = NULL; /* placeholder */ - if(NULL == (scanner = synctex_scanner_parse(scanner)) || 0 >= scanner->unit) {/* scanner->unit must be >0 */ + if (NULL == (scanner = synctex_scanner_parse(scanner)) || 0 >= scanner->unit) {/* scanner->unit must be >0 */ return 0; } /* Convert the given point to scanner integer coordinates */ @@ -3374,7 +3496,7 @@ while((sheet) && SYNCTEX_PAGE(sheet) != page) { sheet = SYNCTEX_SIBLING(sheet); } - if(NULL == sheet) { + if (NULL == sheet) { return -1; } /* Now sheet points to the sheet node with proper page number */ @@ -3383,29 +3505,30 @@ * Then we try with the visible box dimensions. * We try to find a non void box containing the hit point. * We browse all the horizontal boxes until we find one containing the hit point. */ - if((node = SYNCTEX_NEXT_HORIZ_BOX(sheet))) { + if ((node = SYNCTEX_NEXT_HORIZ_BOX(sheet))) { do { - if(_synctex_point_in_box(hitPoint,node,synctex_YES)) { + if (_synctex_point_in_box(hitPoint,node,synctex_YES)) { /* Maybe the hitPoint belongs to a contained vertical box. */ end: /* This trick is for catching overlapping boxes */ - if((other_node = SYNCTEX_NEXT_HORIZ_BOX(node))) { + if ((other_node = SYNCTEX_NEXT_HORIZ_BOX(node))) { do { - if(_synctex_point_in_box(hitPoint,other_node,synctex_YES)) { + if (_synctex_point_in_box(hitPoint,other_node,synctex_YES)) { node = _synctex_smallest_container(other_node,node); } } while((other_node = SYNCTEX_NEXT_HORIZ_BOX(other_node))); } - if((bestContainer = _synctex_eq_deepest_container(hitPoint,node,synctex_YES))) { + /* node is the smallest horizontal box that contains hitPoint. */ + if ((bestContainer = _synctex_eq_deepest_container(hitPoint,node,synctex_YES))) { node = bestContainer; } _synctex_eq_get_closest_children_in_box(hitPoint,node,&bestNodes,&bestDistances,synctex_YES); - if(bestNodes.right && bestNodes.left) { - if((SYNCTEX_TAG(bestNodes.right)!=SYNCTEX_TAG(bestNodes.left)) + if (bestNodes.right && bestNodes.left) { + if ((SYNCTEX_TAG(bestNodes.right)!=SYNCTEX_TAG(bestNodes.left)) || (SYNCTEX_LINE(bestNodes.right)!=SYNCTEX_LINE(bestNodes.left)) || (SYNCTEX_COLUMN(bestNodes.right)!=SYNCTEX_COLUMN(bestNodes.left))) { - if((SYNCTEX_START = malloc(2*sizeof(synctex_node_t)))) { - if(bestDistances.left>bestDistances.right) { + if ((SYNCTEX_START = malloc(2*sizeof(synctex_node_t)))) { + if (bestDistances.left>bestDistances.right) { ((synctex_node_t *)SYNCTEX_START)[0] = bestNodes.right; ((synctex_node_t *)SYNCTEX_START)[1] = bestNodes.left; } else { @@ -3420,16 +3543,16 @@ } /* both nodes have the same input coordinates * We choose the one closest to the hit point */ - if(bestDistances.left>bestDistances.right) { + if (bestDistances.left>bestDistances.right) { bestNodes.left = bestNodes.right; } bestNodes.right = NULL; - } else if(bestNodes.right) { + } else if (bestNodes.right) { bestNodes.left = bestNodes.right; - } else if(!bestNodes.left){ + } else if (!bestNodes.left){ bestNodes.left = node; } - if((SYNCTEX_START = malloc(sizeof(synctex_node_t)))) { + if ((SYNCTEX_START = malloc(sizeof(synctex_node_t)))) { * (synctex_node_t *)SYNCTEX_START = bestNodes.left; SYNCTEX_END = SYNCTEX_START + sizeof(synctex_node_t); SYNCTEX_CUR = NULL; @@ -3438,9 +3561,12 @@ return SYNCTEX_STATUS_ERROR; } } while ((node = SYNCTEX_NEXT_HORIZ_BOX(node))); + /* All the horizontal boxes have been tested, + * None of them contains the hit point. + */ } /* We are not lucky */ - if((node = SYNCTEX_CHILD(sheet))) { + if ((node = SYNCTEX_CHILD(sheet))) { goto end; } return 0; @@ -3461,7 +3587,7 @@ * if node is to the left of the hit point, this distance is negative.*/ int _synctex_point_h_distance(synctex_point_t hitPoint, synctex_node_t node, synctex_bool_t visible); int _synctex_point_h_distance(synctex_point_t hitPoint, synctex_node_t node, synctex_bool_t visible) { - if(node) { + if (node) { int min,med,max; switch(node->class->type) { /* The distance between a point and a box is special. @@ -3484,7 +3610,7 @@ min = visible?SYNCTEX_HORIZ_V(node):SYNCTEX_HORIZ(node); max = min + (visible?SYNCTEX_ABS_WIDTH_V(node):SYNCTEX_ABS_WIDTH(node)); /* We allways have min <= max */ - if(hitPoint.h<min) { + if (hitPoint.h<min) { return min - hitPoint.h; /* regions 1+4+7, result is > 0 */ } else if (hitPoint.h>max) { return max - hitPoint.h; /* regions 3+6+9, result is < 0 */ @@ -3500,7 +3626,7 @@ min = SYNCTEX_HORIZ(node); max = min + SYNCTEX_ABS_WIDTH(node); /* We allways have min <= max */ - if(hitPoint.h<min) { + if (hitPoint.h<min) { return min - hitPoint.h; /* regions 1+4+7, result is > 0 */ } else if (hitPoint.h>max) { return max - hitPoint.h; /* regions 3+6+9, result is < 0 */ @@ -3514,7 +3640,7 @@ * in general, there is no text material in the kern, * this is why we compute the offset relative to the closest edge of the kern.*/ max = SYNCTEX_WIDTH(node); - if(max<0) { + if (max<0) { min = SYNCTEX_HORIZ(node); max = min - max; } else { @@ -3538,7 +3664,7 @@ * It means that the best choice should be made according to the situation that occurs * most frequently. */ - if(hitPoint.h<min) { + if (hitPoint.h<min) { @@ Diff output truncated at 100000 characters. @@ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hofman@us...> - 2011-10-10 09:20:15
|
Revision: 7514 http://skim-app.svn.sourceforge.net/skim-app/?rev=7514&view=rev Author: hofman Date: 2011-10-10 09:20:09 +0000 (Mon, 10 Oct 2011) Log Message: ----------- Tag for release Added Paths: ----------- tags/REL_1_3_18/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hofman@us...> - 2011-10-10 09:19:32
|
Revision: 7513 http://skim-app.svn.sourceforge.net/skim-app/?rev=7513&view=rev Author: hofman Date: 2011-10-10 09:19:23 +0000 (Mon, 10 Oct 2011) Log Message: ----------- update version numbers and release notes for release Modified Paths: -------------- trunk/Dutch.lproj/InfoPlist.strings trunk/Dutch.lproj/SkimHelp/version.texi trunk/English.lproj/InfoPlist.strings trunk/English.lproj/SkimHelp/version.texi trunk/French.lproj/InfoPlist.strings trunk/German.lproj/InfoPlist.strings trunk/Info.plist trunk/Italian.lproj/InfoPlist.strings trunk/Japanese.lproj/InfoPlist.strings trunk/ReleaseNotes.rtf trunk/Skim.xcodeproj/project.pbxproj trunk/Spanish.lproj/InfoPlist.strings trunk/pl.lproj/InfoPlist.strings trunk/ru.lproj/InfoPlist.strings trunk/zh_TW.lproj/InfoPlist.strings Modified: trunk/Dutch.lproj/InfoPlist.strings =================================================================== (Binary files differ) Modified: trunk/Dutch.lproj/SkimHelp/version.texi =================================================================== --- trunk/Dutch.lproj/SkimHelp/version.texi 2011-10-08 12:48:28 UTC (rev 7512) +++ trunk/Dutch.lproj/SkimHelp/version.texi 2011-10-10 09:19:23 UTC (rev 7513) @@ -1 +1 @@ -@... VERSION 1.3.17 +@set VERSION 1.3.18 Modified: trunk/English.lproj/InfoPlist.strings =================================================================== (Binary files differ) Modified: trunk/English.lproj/SkimHelp/version.texi =================================================================== --- trunk/English.lproj/SkimHelp/version.texi 2011-10-08 12:48:28 UTC (rev 7512) +++ trunk/English.lproj/SkimHelp/version.texi 2011-10-10 09:19:23 UTC (rev 7513) @@ -1 +1 @@ -@... VERSION 1.3.17 +@set VERSION 1.3.18 Modified: trunk/French.lproj/InfoPlist.strings =================================================================== (Binary files differ) Modified: trunk/German.lproj/InfoPlist.strings =================================================================== (Binary files differ) Modified: trunk/Info.plist =================================================================== --- trunk/Info.plist 2011-10-08 12:48:28 UTC (rev 7512) +++ trunk/Info.plist 2011-10-10 09:19:23 UTC (rev 7513) @@ -535,7 +535,7 @@ <key>CFBundlePackageType</key> <string>APPL</string> <key>CFBundleShortVersionString</key> - <string>1.3.17</string> + <string>1.3.18</string> <key>CFBundleSignature</key> <string>SKim</string> <key>CFBundleVersion</key> Modified: trunk/Italian.lproj/InfoPlist.strings =================================================================== (Binary files differ) Modified: trunk/Japanese.lproj/InfoPlist.strings =================================================================== (Binary files differ) Modified: trunk/ReleaseNotes.rtf =================================================================== --- trunk/ReleaseNotes.rtf 2011-10-08 12:48:28 UTC (rev 7512) +++ trunk/ReleaseNotes.rtf 2011-10-10 09:19:23 UTC (rev 7513) @@ -222,8 +222,11 @@ {\list\listtemplateid219\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid21801\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid219} {\list\listtemplateid220\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid21901\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid220} {\list\listtemplateid221\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid22001\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid221} -{\list\listtemplateid222\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid22101\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid222}} -{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}{\listoverride\listid4\listoverridecount0\ls4}{\listoverride\listid5\listoverridecount0\ls5}{\listoverride\listid6\listoverridecount0\ls6}{\listoverride\listid7\listoverridecount0\ls7}{\listoverride\listid8\listoverridecount0\ls8}{\listoverride\listid9\listoverridecount0\ls9}{\listoverride\listid10\listoverridecount0\ls10}{\listoverride\listid11\listoverridecount0\ls11}{\listoverride\listid12\listoverridecount0\ls12}{\listoverride\listid13\listoverridecount0\ls13}{\listoverride\listid14\listoverridecount0\ls14}{\listoverride\listid15\listoverridecount0\ls15}{\listoverride\listid16\listoverridecount0\ls16}{\listoverride\listid17\listoverridecount0\ls17}{\listoverride\listid18\listoverridecount0\ls18}{\listoverride\listid19\listoverridecount0\ls19}{\listoverride\listid20\listoverridecount0\ls20}{\listoverride\listid21\listoverridecount0\ls21}{\listoverride\listid22\listoverridecount0\ls22}{\listoverride\listid23\listoverridecount0\ls23}{\listoverride\listid24\listoverridecount0\ls24}{\listoverride\listid25\listoverridecount0\ls25}{\listoverride\listid26\listoverridecount0\ls26}{\listoverride\listid27\listoverridecount0\ls27}{\listoverride\listid28\listoverridecount0\ls28}{\listoverride\listid29\listoverridecount0\ls29}{\listoverride\listid30\listoverridecount0\ls30}{\listoverride\listid31\listoverridecount0\ls31}{\listoverride\listid32\listoverridecount0\ls32}{\listoverride\listid33\listoverridecount0\ls33}{\listoverride\listid34\listoverridecount0\ls34}{\listoverride\listid35\listoverridecount0\ls35}{\listoverride\listid36\listoverridecount0\ls36}{\listoverride\listid37\listoverridecount0\ls37}{\listoverride\listid38\listoverridecount0\ls38}{\listoverride\listid39\listoverridecount0\ls39}{\listoverride\listid40\listoverridecount0\ls40}{\listoverride\listid41\listoverridecount0\ls41}{\listoverride\listid42\listoverridecount0\ls42}{\listoverride\listid43\listoverridecount0\ls43}{\listoverride\listid44\listoverridecount0\ls44}{\listoverride\listid45\listoverridecount0\ls45}{\listoverride\listid46\listoverridecount0\ls46}{\listoverride\listid47\listoverridecount0\ls47}{\listoverride\listid48\listoverridecount0\ls48}{\listoverride\listid49\listoverridecount0\ls49}{\listoverride\listid50\listoverridecount0\ls50}{\listoverride\listid51\listoverridecount0\ls51}{\listoverride\listid52\listoverridecount0\ls52}{\listoverride\listid53\listoverridecount0\ls53}{\listoverride\listid54\listoverridecount0\ls54}{\listoverride\listid55\listoverridecount0\ls55}{\listoverride\listid56\listoverridecount0\ls56}{\listoverride\listid57\listoverridecount0\ls57}{\listoverride\listid58\listoverridecount0\ls58}{\listoverride\listid59\listoverridecount0\ls59}{\listoverride\listid60\listoverridecount0\ls60}{\listoverride\listid61\listoverridecount0\ls61}{\listoverride\listid62\listoverridecount0\ls62}{\listoverride\listid63\listoverridecount0\ls63}{\listoverride\listid64\listoverridecount0\ls64}{\listoverride\listid65\listoverridecount0\ls65}{\listoverride\listid66\listoverridecount0\ls66}{\listoverride\listid67\listoverridecount0\ls67}{\listoverride\listid68\listoverridecount0\ls68}{\listoverride\listid69\listoverridecount0\ls69}{\listoverride\listid70\listoverridecount0\ls70}{\listoverride\listid71\listoverridecount0\ls71}{\listoverride\listid72\listoverridecount0\ls72}{\listoverride\listid73\listoverridecount0\ls73}{\listoverride\listid74\listoverridecount0\ls74}{\listoverride\listid75\listoverridecount0\ls75}{\listoverride\listid76\listoverridecount0\ls76}{\listoverride\listid77\listoverridecount0\ls77}{\listoverride\listid78\listoverridecount0\ls78}{\listoverride\listid79\listoverridecount0\ls79}{\listoverride\listid80\listoverridecount0\ls80}{\listoverride\listid81\listoverridecount0\ls81}{\listoverride\listid82\listoverridecount0\ls82}{\listoverride\listid83\listoverridecount0\ls83}{\listoverride\listid84\listoverridecount0\ls84}{\listoverride\listid85\listoverridecount0\ls85}{\listoverride\listid86\listoverridecount0\ls86}{\listoverride\listid87\listoverridecount0\ls87}{\listoverride\listid88\listoverridecount0\ls88}{\listoverride\listid89\listoverridecount0\ls89}{\listoverride\listid90\listoverridecount0\ls90}{\listoverride\listid91\listoverridecount0\ls91}{\listoverride\listid92\listoverridecount0\ls92}{\listoverride\listid93\listoverridecount0\ls93}{\listoverride\listid94\listoverridecount0\ls94}{\listoverride\listid95\listoverridecount0\ls95}{\listoverride\listid96\listoverridecount0\ls96}{\listoverride\listid97\listoverridecount0\ls97}{\listoverride\listid98\listoverridecount0\ls98}{\listoverride\listid99\listoverridecount0\ls99}{\listoverride\listid100\listoverridecount0\ls100}{\listoverride\listid101\listoverridecount0\ls101}{\listoverride\listid102\listoverridecount0\ls102}{\listoverride\listid103\listoverridecount0\ls103}{\listoverride\listid104\listoverridecount0\ls104}{\listoverride\listid105\listoverridecount0\ls105}{\listoverride\listid106\listoverridecount0\ls106}{\listoverride\listid107\listoverridecount0\ls107}{\listoverride\listid108\listoverridecount0\ls108}{\listoverride\listid109\listoverridecount0\ls109}{\listoverride\listid110\listoverridecount0\ls110}{\listoverride\listid111\listoverridecount0\ls111}{\listoverride\listid112\listoverridecount0\ls112}{\listoverride\listid113\listoverridecount0\ls113}{\listoverride\listid114\listoverridecount0\ls114}{\listoverride\listid115\listoverridecount0\ls115}{\listoverride\listid116\listoverridecount0\ls116}{\listoverride\listid117\listoverridecount0\ls117}{\listoverride\listid118\listoverridecount0\ls118}{\listoverride\listid119\listoverridecount0\ls119}{\listoverride\listid120\listoverridecount0\ls120}{\listoverride\listid121\listoverridecount0\ls121}{\listoverride\listid122\listoverridecount0\ls122}{\listoverride\listid123\listoverridecount0\ls123}{\listoverride\listid124\listoverridecount0\ls124}{\listoverride\listid125\listoverridecount0\ls125}{\listoverride\listid126\listoverridecount0\ls126}{\listoverride\listid127\listoverridecount0\ls127}{\listoverride\listid128\listoverridecount0\ls128}{\listoverride\listid129\listoverridecount0\ls129}{\listoverride\listid130\listoverridecount0\ls130}{\listoverride\listid131\listoverridecount0\ls131}{\listoverride\listid132\listoverridecount0\ls132}{\listoverride\listid133\listoverridecount0\ls133}{\listoverride\listid134\listoverridecount0\ls134}{\listoverride\listid135\listoverridecount0\ls135}{\listoverride\listid136\listoverridecount0\ls136}{\listoverride\listid137\listoverridecount0\ls137}{\listoverride\listid138\listoverridecount0\ls138}{\listoverride\listid139\listoverridecount0\ls139}{\listoverride\listid140\listoverridecount0\ls140}{\listoverride\listid141\listoverridecount0\ls141}{\listoverride\listid142\listoverridecount0\ls142}{\listoverride\listid143\listoverridecount0\ls143}{\listoverride\listid144\listoverridecount0\ls144}{\listoverride\listid145\listoverridecount0\ls145}{\listoverride\listid146\listoverridecount0\ls146}{\listoverride\listid147\listoverridecount0\ls147}{\listoverride\listid148\listoverridecount0\ls148}{\listoverride\listid149\listoverridecount0\ls149}{\listoverride\listid150\listoverridecount0\ls150}{\listoverride\listid151\listoverridecount0\ls151}{\listoverride\listid152\listoverridecount0\ls152}{\listoverride\listid153\listoverridecount0\ls153}{\listoverride\listid154\listoverridecount0\ls154}{\listoverride\listid155\listoverridecount0\ls155}{\listoverride\listid156\listoverridecount0\ls156}{\listoverride\listid157\listoverridecount0\ls157}{\listoverride\listid158\listoverridecount0\ls158}{\listoverride\listid159\listoverridecount0\ls159}{\listoverride\listid160\listoverridecount0\ls160}{\listoverride\listid161\listoverridecount0\ls161}{\listoverride\listid162\listoverridecount0\ls162}{\listoverride\listid163\listoverridecount0\ls163}{\listoverride\listid164\listoverridecount0\ls164}{\listoverride\listid165\listoverridecount0\ls165}{\listoverride\listid166\listoverridecount0\ls166}{\listoverride\listid167\listoverridecount0\ls167}{\listoverride\listid168\listoverridecount0\ls168}{\listoverride\listid169\listoverridecount0\ls169}{\listoverride\listid170\listoverridecount0\ls170}{\listoverride\listid171\listoverridecount0\ls171}{\listoverride\listid172\listoverridecount0\ls172}{\listoverride\listid173\listoverridecount0\ls173}{\listoverride\listid174\listoverridecount0\ls174}{\listoverride\listid175\listoverridecount0\ls175}{\listoverride\listid176\listoverridecount0\ls176}{\listoverride\listid177\listoverridecount0\ls177}{\listoverride\listid178\listoverridecount0\ls178}{\listoverride\listid179\listoverridecount0\ls179}{\listoverride\listid180\listoverridecount0\ls180}{\listoverride\listid181\listoverridecount0\ls181}{\listoverride\listid182\listoverridecount0\ls182}{\listoverride\listid183\listoverridecount0\ls183}{\listoverride\listid184\listoverridecount0\ls184}{\listoverride\listid185\listoverridecount0\ls185}{\listoverride\listid186\listoverridecount0\ls186}{\listoverride\listid187\listoverridecount0\ls187}{\listoverride\listid188\listoverridecount0\ls188}{\listoverride\listid189\listoverridecount0\ls189}{\listoverride\listid190\listoverridecount0\ls190}{\listoverride\listid191\listoverridecount0\ls191}{\listoverride\listid192\listoverridecount0\ls192}{\listoverride\listid193\listoverridecount0\ls193}{\listoverride\listid194\listoverridecount0\ls194}{\listoverride\listid195\listoverridecount0\ls195}{\listoverride\listid196\listoverridecount0\ls196}{\listoverride\listid197\listoverridecount0\ls197}{\listoverride\listid198\listoverridecount0\ls198}{\listoverride\listid199\listoverridecount0\ls199}{\listoverride\listid200\listoverridecount0\ls200}{\listoverride\listid201\listoverridecount0\ls201}{\listoverride\listid202\listoverridecount0\ls202}{\listoverride\listid203\listoverridecount0\ls203}{\listoverride\listid204\listoverridecount0\ls204}{\listoverride\listid205\listoverridecount0\ls205}{\listoverride\listid206\listoverridecount0\ls206}{\listoverride\listid207\listoverridecount0\ls207}{\listoverride\listid208\listoverridecount0\ls208}{\listoverride\listid209\listoverridecount0\ls209}{\listoverride\listid210\listoverridecount0\ls210}{\listoverride\listid211\listoverridecount0\ls211}{\listoverride\listid212\listoverridecount0\ls212}{\listoverride\listid213\listoverridecount0\ls213}{\listoverride\listid214\listoverridecount0\ls214}{\listoverride\listid215\listoverridecount0\ls215}{\listoverride\listid216\listoverridecount0\ls216}{\listoverride\listid217\listoverridecount0\ls217}{\listoverride\listid218\listoverridecount0\ls218}{\listoverride\listid219\listoverridecount0\ls219}{\listoverride\listid220\listoverridecount0\ls220}{\listoverride\listid221\listoverridecount0\ls221}{\listoverride\listid222\listoverridecount0\ls222}} +{\list\listtemplateid222\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid22101\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid222} +{\list\listtemplateid223\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid22201\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid223} +{\list\listtemplateid224\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid22301\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid224} +{\list\listtemplateid225\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid22401\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid225}} +{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}{\listoverride\listid4\listoverridecount0\ls4}{\listoverride\listid5\listoverridecount0\ls5}{\listoverride\listid6\listoverridecount0\ls6}{\listoverride\listid7\listoverridecount0\ls7}{\listoverride\listid8\listoverridecount0\ls8}{\listoverride\listid9\listoverridecount0\ls9}{\listoverride\listid10\listoverridecount0\ls10}{\listoverride\listid11\listoverridecount0\ls11}{\listoverride\listid12\listoverridecount0\ls12}{\listoverride\listid13\listoverridecount0\ls13}{\listoverride\listid14\listoverridecount0\ls14}{\listoverride\listid15\listoverridecount0\ls15}{\listoverride\listid16\listoverridecount0\ls16}{\listoverride\listid17\listoverridecount0\ls17}{\listoverride\listid18\listoverridecount0\ls18}{\listoverride\listid19\listoverridecount0\ls19}{\listoverride\listid20\listoverridecount0\ls20}{\listoverride\listid21\listoverridecount0\ls21}{\listoverride\listid22\listoverridecount0\ls22}{\listoverride\listid23\listoverridecount0\ls23}{\listoverride\listid24\listoverridecount0\ls24}{\listoverride\listid25\listoverridecount0\ls25}{\listoverride\listid26\listoverridecount0\ls26}{\listoverride\listid27\listoverridecount0\ls27}{\listoverride\listid28\listoverridecount0\ls28}{\listoverride\listid29\listoverridecount0\ls29}{\listoverride\listid30\listoverridecount0\ls30}{\listoverride\listid31\listoverridecount0\ls31}{\listoverride\listid32\listoverridecount0\ls32}{\listoverride\listid33\listoverridecount0\ls33}{\listoverride\listid34\listoverridecount0\ls34}{\listoverride\listid35\listoverridecount0\ls35}{\listoverride\listid36\listoverridecount0\ls36}{\listoverride\listid37\listoverridecount0\ls37}{\listoverride\listid38\listoverridecount0\ls38}{\listoverride\listid39\listoverridecount0\ls39}{\listoverride\listid40\listoverridecount0\ls40}{\listoverride\listid41\listoverridecount0\ls41}{\listoverride\listid42\listoverridecount0\ls42}{\listoverride\listid43\listoverridecount0\ls43}{\listoverride\listid44\listoverridecount0\ls44}{\listoverride\listid45\listoverridecount0\ls45}{\listoverride\listid46\listoverridecount0\ls46}{\listoverride\listid47\listoverridecount0\ls47}{\listoverride\listid48\listoverridecount0\ls48}{\listoverride\listid49\listoverridecount0\ls49}{\listoverride\listid50\listoverridecount0\ls50}{\listoverride\listid51\listoverridecount0\ls51}{\listoverride\listid52\listoverridecount0\ls52}{\listoverride\listid53\listoverridecount0\ls53}{\listoverride\listid54\listoverridecount0\ls54}{\listoverride\listid55\listoverridecount0\ls55}{\listoverride\listid56\listoverridecount0\ls56}{\listoverride\listid57\listoverridecount0\ls57}{\listoverride\listid58\listoverridecount0\ls58}{\listoverride\listid59\listoverridecount0\ls59}{\listoverride\listid60\listoverridecount0\ls60}{\listoverride\listid61\listoverridecount0\ls61}{\listoverride\listid62\listoverridecount0\ls62}{\listoverride\listid63\listoverridecount0\ls63}{\listoverride\listid64\listoverridecount0\ls64}{\listoverride\listid65\listoverridecount0\ls65}{\listoverride\listid66\listoverridecount0\ls66}{\listoverride\listid67\listoverridecount0\ls67}{\listoverride\listid68\listoverridecount0\ls68}{\listoverride\listid69\listoverridecount0\ls69}{\listoverride\listid70\listoverridecount0\ls70}{\listoverride\listid71\listoverridecount0\ls71}{\listoverride\listid72\listoverridecount0\ls72}{\listoverride\listid73\listoverridecount0\ls73}{\listoverride\listid74\listoverridecount0\ls74}{\listoverride\listid75\listoverridecount0\ls75}{\listoverride\listid76\listoverridecount0\ls76}{\listoverride\listid77\listoverridecount0\ls77}{\listoverride\listid78\listoverridecount0\ls78}{\listoverride\listid79\listoverridecount0\ls79}{\listoverride\listid80\listoverridecount0\ls80}{\listoverride\listid81\listoverridecount0\ls81}{\listoverride\listid82\listoverridecount0\ls82}{\listoverride\listid83\listoverridecount0\ls83}{\listoverride\listid84\listoverridecount0\ls84}{\listoverride\listid85\listoverridecount0\ls85}{\listoverride\listid86\listoverridecount0\ls86}{\listoverride\listid87\listoverridecount0\ls87}{\listoverride\listid88\listoverridecount0\ls88}{\listoverride\listid89\listoverridecount0\ls89}{\listoverride\listid90\listoverridecount0\ls90}{\listoverride\listid91\listoverridecount0\ls91}{\listoverride\listid92\listoverridecount0\ls92}{\listoverride\listid93\listoverridecount0\ls93}{\listoverride\listid94\listoverridecount0\ls94}{\listoverride\listid95\listoverridecount0\ls95}{\listoverride\listid96\listoverridecount0\ls96}{\listoverride\listid97\listoverridecount0\ls97}{\listoverride\listid98\listoverridecount0\ls98}{\listoverride\listid99\listoverridecount0\ls99}{\listoverride\listid100\listoverridecount0\ls100}{\listoverride\listid101\listoverridecount0\ls101}{\listoverride\listid102\listoverridecount0\ls102}{\listoverride\listid103\listoverridecount0\ls103}{\listoverride\listid104\listoverridecount0\ls104}{\listoverride\listid105\listoverridecount0\ls105}{\listoverride\listid106\listoverridecount0\ls106}{\listoverride\listid107\listoverridecount0\ls107}{\listoverride\listid108\listoverridecount0\ls108}{\listoverride\listid109\listoverridecount0\ls109}{\listoverride\listid110\listoverridecount0\ls110}{\listoverride\listid111\listoverridecount0\ls111}{\listoverride\listid112\listoverridecount0\ls112}{\listoverride\listid113\listoverridecount0\ls113}{\listoverride\listid114\listoverridecount0\ls114}{\listoverride\listid115\listoverridecount0\ls115}{\listoverride\listid116\listoverridecount0\ls116}{\listoverride\listid117\listoverridecount0\ls117}{\listoverride\listid118\listoverridecount0\ls118}{\listoverride\listid119\listoverridecount0\ls119}{\listoverride\listid120\listoverridecount0\ls120}{\listoverride\listid121\listoverridecount0\ls121}{\listoverride\listid122\listoverridecount0\ls122}{\listoverride\listid123\listoverridecount0\ls123}{\listoverride\listid124\listoverridecount0\ls124}{\listoverride\listid125\listoverridecount0\ls125}{\listoverride\listid126\listoverridecount0\ls126}{\listoverride\listid127\listoverridecount0\ls127}{\listoverride\listid128\listoverridecount0\ls128}{\listoverride\listid129\listoverridecount0\ls129}{\listoverride\listid130\listoverridecount0\ls130}{\listoverride\listid131\listoverridecount0\ls131}{\listoverride\listid132\listoverridecount0\ls132}{\listoverride\listid133\listoverridecount0\ls133}{\listoverride\listid134\listoverridecount0\ls134}{\listoverride\listid135\listoverridecount0\ls135}{\listoverride\listid136\listoverridecount0\ls136}{\listoverride\listid137\listoverridecount0\ls137}{\listoverride\listid138\listoverridecount0\ls138}{\listoverride\listid139\listoverridecount0\ls139}{\listoverride\listid140\listoverridecount0\ls140}{\listoverride\listid141\listoverridecount0\ls141}{\listoverride\listid142\listoverridecount0\ls142}{\listoverride\listid143\listoverridecount0\ls143}{\listoverride\listid144\listoverridecount0\ls144}{\listoverride\listid145\listoverridecount0\ls145}{\listoverride\listid146\listoverridecount0\ls146}{\listoverride\listid147\listoverridecount0\ls147}{\listoverride\listid148\listoverridecount0\ls148}{\listoverride\listid149\listoverridecount0\ls149}{\listoverride\listid150\listoverridecount0\ls150}{\listoverride\listid151\listoverridecount0\ls151}{\listoverride\listid152\listoverridecount0\ls152}{\listoverride\listid153\listoverridecount0\ls153}{\listoverride\listid154\listoverridecount0\ls154}{\listoverride\listid155\listoverridecount0\ls155}{\listoverride\listid156\listoverridecount0\ls156}{\listoverride\listid157\listoverridecount0\ls157}{\listoverride\listid158\listoverridecount0\ls158}{\listoverride\listid159\listoverridecount0\ls159}{\listoverride\listid160\listoverridecount0\ls160}{\listoverride\listid161\listoverridecount0\ls161}{\listoverride\listid162\listoverridecount0\ls162}{\listoverride\listid163\listoverridecount0\ls163}{\listoverride\listid164\listoverridecount0\ls164}{\listoverride\listid165\listoverridecount0\ls165}{\listoverride\listid166\listoverridecount0\ls166}{\listoverride\listid167\listoverridecount0\ls167}{\listoverride\listid168\listoverridecount0\ls168}{\listoverride\listid169\listoverridecount0\ls169}{\listoverride\listid170\listoverridecount0\ls170}{\listoverride\listid171\listoverridecount0\ls171}{\listoverride\listid172\listoverridecount0\ls172}{\listoverride\listid173\listoverridecount0\ls173}{\listoverride\listid174\listoverridecount0\ls174}{\listoverride\listid175\listoverridecount0\ls175}{\listoverride\listid176\listoverridecount0\ls176}{\listoverride\listid177\listoverridecount0\ls177}{\listoverride\listid178\listoverridecount0\ls178}{\listoverride\listid179\listoverridecount0\ls179}{\listoverride\listid180\listoverridecount0\ls180}{\listoverride\listid181\listoverridecount0\ls181}{\listoverride\listid182\listoverridecount0\ls182}{\listoverride\listid183\listoverridecount0\ls183}{\listoverride\listid184\listoverridecount0\ls184}{\listoverride\listid185\listoverridecount0\ls185}{\listoverride\listid186\listoverridecount0\ls186}{\listoverride\listid187\listoverridecount0\ls187}{\listoverride\listid188\listoverridecount0\ls188}{\listoverride\listid189\listoverridecount0\ls189}{\listoverride\listid190\listoverridecount0\ls190}{\listoverride\listid191\listoverridecount0\ls191}{\listoverride\listid192\listoverridecount0\ls192}{\listoverride\listid193\listoverridecount0\ls193}{\listoverride\listid194\listoverridecount0\ls194}{\listoverride\listid195\listoverridecount0\ls195}{\listoverride\listid196\listoverridecount0\ls196}{\listoverride\listid197\listoverridecount0\ls197}{\listoverride\listid198\listoverridecount0\ls198}{\listoverride\listid199\listoverridecount0\ls199}{\listoverride\listid200\listoverridecount0\ls200}{\listoverride\listid201\listoverridecount0\ls201}{\listoverride\listid202\listoverridecount0\ls202}{\listoverride\listid203\listoverridecount0\ls203}{\listoverride\listid204\listoverridecount0\ls204}{\listoverride\listid205\listoverridecount0\ls205}{\listoverride\listid206\listoverridecount0\ls206}{\listoverride\listid207\listoverridecount0\ls207}{\listoverride\listid208\listoverridecount0\ls208}{\listoverride\listid209\listoverridecount0\ls209}{\listoverride\listid210\listoverridecount0\ls210}{\listoverride\listid211\listoverridecount0\ls211}{\listoverride\listid212\listoverridecount0\ls212}{\listoverride\listid213\listoverridecount0\ls213}{\listoverride\listid214\listoverridecount0\ls214}{\listoverride\listid215\listoverridecount0\ls215}{\listoverride\listid216\listoverridecount0\ls216}{\listoverride\listid217\listoverridecount0\ls217}{\listoverride\listid218\listoverridecount0\ls218}{\listoverride\listid219\listoverridecount0\ls219}{\listoverride\listid220\listoverridecount0\ls220}{\listoverride\listid221\listoverridecount0\ls221}{\listoverride\listid222\listoverridecount0\ls222}{\listoverride\listid223\listoverridecount0\ls223}{\listoverride\listid224\listoverridecount0\ls224}{\listoverride\listid225\listoverridecount0\ls225}} \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural \f0\fs60 \cf0 Skim Release Notes\ @@ -232,6 +235,32 @@ \f1\fs22 \cf0 \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural +\f0\b\fs28 \cf0 Changes since 1.3.17\ +\pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural +\cf0 \ +\pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural + +\i\fs26 \cf0 New Features\ +\pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural +\ls2\ilvl0 +\f1\i0\b0\fs22 \cf0 {\listtext \'95 }Hold Option key to show content of a session bookmark.\ +\pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural +\ls2\ilvl0\cf0 {\listtext \'95 }Remember search options between documents.\ +{\listtext \'95 }Allow setting the folder to save downloads in.\ +\pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural + +\f0\i\b\fs26 \cf0 \ +Bugs Fixed\ +\pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural +\ls3\ilvl0 +\f1\i0\b0\fs22 \cf0 {\listtext \'95 }Make sure zoom popups in snapshots are shown in Lion.\ +\pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural +\ls3\ilvl0\cf0 {\listtext \'95 }Prevent certain save, convert, and copy operations when printing is not allowed.\ +{\listtext \'95 }Avoid a Lion system bug in the updater.\ +\pard\tx560\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural +\ls4\ilvl0\cf0 \ +\pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural + \f0\b\fs28 \cf0 Changes since 1.3.16\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural \cf0 \ @@ -239,7 +268,7 @@ \i\fs26 \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls2\ilvl0 +\ls5\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Remove find bar using escape.\ {\listtext \'95 }Command-click on split PDF to go to a point in the main view.\ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural @@ -247,7 +276,7 @@ \f0\i\b\fs26 \cf0 \ Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls3\ilvl0 +\ls6\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Fix AppleScript support for selections on Lion.\ {\listtext \'95 }Improve printing support on Lion.\ {\listtext \'95 }Clear selection on mouse down in Move, Magnify, and Select tool mode.\ @@ -256,7 +285,7 @@ {\listtext \'95 }Make sure search field in notes document is always shown when initiating a search.\ {\listtext \'95 }Disable Lion's built-in window restoration feature.\ \pard\tx560\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural -\ls4\ilvl0\cf0 \ +\ls7\ilvl0\cf0 \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \f0\b\fs28 \cf0 Changes since 1.3.15\ @@ -266,12 +295,12 @@ \i\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls5\ilvl0 +\ls8\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Fix full screen support on Lion.\ {\listtext \'95 }Fix preview tool tips.\ {\listtext \'95 }Improve displayline script for .dvi and .xdv files.\ \pard\tx560\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural -\ls6\ilvl0\cf0 \ +\ls9\ilvl0\cf0 \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \f0\b\fs28 \cf0 Changes since 1.3.14\ @@ -281,7 +310,7 @@ \i\fs26 \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls7\ilvl0 +\ls10\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Support for "open location" script command.\ {\listtext \'95 }Support some URL open parameters, if we receive them.\ {\listtext \'95 }Replace the find bpanel by a scope bar in the window.\ @@ -293,14 +322,14 @@ \f0\i\b\fs26 \cf0 \ Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls8\ilvl0 +\ls11\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Allow numeric pad keys for type select.\ {\listtext \'95 }Update Get Info window when information changes.\ {\listtext \'95 }Fix position of synctex indication.\ {\listtext \'95 }Fixes to German localization.\ {\listtext \'95 }Improvements to preferences: layout, animation, and next/previous actions.\ \pard\tx560\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural -\ls9\ilvl0\cf0 \ +\ls12\ilvl0\cf0 \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \f0\b\fs28 \cf0 Changes since 1.3.13\ @@ -310,7 +339,7 @@ \i\fs26 \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls10\ilvl0 +\ls13\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }New hidden default for image smoothing.\ {\listtext \'95 }Support select script command.\ {\listtext \'95 }Allow AppleScript select command to animate the selection.\ @@ -320,12 +349,12 @@ \f0\i\b\fs26 \cf0 \ Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls11\ilvl0 +\ls14\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Don't scale down pages when printed by default.\ {\listtext \'95 }Remove Move to Trash menu item as it is incompatible with text editing.\ {\listtext \'95 }Scale font passed to accessibility.\ \pard\tx560\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural -\ls12\ilvl0\cf0 \ +\ls15\ilvl0\cf0 \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \f0\b\fs28 \cf0 Changes since 1.3.12\ @@ -335,7 +364,7 @@ \i\fs26 \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls13\ilvl0 +\ls16\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }New action to move a file to trash. \f0\b\fs28 \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural @@ -343,16 +372,16 @@ \i\fs26 \cf0 \ Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls14\ilvl0 +\ls17\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Fix creating bookmarks in AppleScript.\ {\listtext \'95 }Fix crasher after trying to reopen deleted files.\ {\listtext \'95 }Run AppleScripts from menu in separate process, to avoid timeouts.\ {\listtext \'95 }Default to scale down printed pages.\ {\listtext \'95 }Fix a sheet conflict when converting notes.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls15\ilvl0\cf0 {\listtext \'95 }Fix a crasher on searching PDF.\ +\ls18\ilvl0\cf0 {\listtext \'95 }Fix a crasher on searching PDF.\ \pard\tx560\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural -\ls15\ilvl0\cf0 \ +\ls18\ilvl0\cf0 \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \f0\b\fs28 \cf0 Changes since 1.3.11\ @@ -362,12 +391,12 @@ \i\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls16\ilvl0 +\ls19\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Fix automatic file updating.\ {\listtext \'95 }Fix check in action to add new note.\ {\listtext \'95 }Fix duplicate bookmarks manager.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls17\ilvl0\cf0 {\listtext \'95 }Fix clicking remote links.\ +\ls20\ilvl0\cf0 {\listtext \'95 }Fix clicking remote links.\ \pard\tx560\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \cf0 \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural @@ -379,20 +408,20 @@ \i\fs26 \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls18\ilvl0 +\ls21\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Hold down Option to open all bookmarks in a bookmark folder at once.\ {\listtext \'95 }Codesigning for enhanced security and portability of saved PDF passwords.\ {\listtext \'95 }Added Japanese localization (thanks Toru Ishizaki).\ {\listtext \'95 }New background option for displayline script.\ {\listtext \'95 }New service to show Skim notes.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls18\ilvl0 +\ls21\ilvl0 \f0\b\fs28 \cf0 \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \i\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls19\ilvl0 +\ls22\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Fixes and improvements for scripting selections.\ {\listtext \'95 }Complete support for webarchive templates.\ {\listtext \'95 }Warn before opening a folder containing a large number of documents.\ @@ -411,7 +440,7 @@ {\listtext \'95 }Fix Clear button enabling in Downloads window.\ {\listtext \'95 }Allow setting owner password when it's different from the user password.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls20\ilvl0\cf0 \ +\ls23\ilvl0\cf0 \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \f0\b\fs28 \cf0 Changes since 1.3.9\ @@ -421,7 +450,7 @@ \i\fs26 \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls21\ilvl0 +\ls24\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Support for .webarchive export templates.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural @@ -430,7 +459,7 @@ \i\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls22\ilvl0 +\ls25\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Make sure page popup is updated in snapshot zooming.\ {\listtext \'95 }Update synctex parser to latest version, with some fixes.\ {\listtext \'95 }Make sure the favorite colors toolbar item is properly updated when colors are added or removed.\ @@ -439,7 +468,7 @@ {\listtext \'95 }Fix used mail program.\ {\listtext \'95 }Fix for interpreting selections in AppleScript.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls23\ilvl0\cf0 {\listtext \'95 }Avoid calling a method not defined on Leopard.\ +\ls26\ilvl0\cf0 {\listtext \'95 }Avoid calling a method not defined on Leopard.\ \pard\tx560\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \cf0 \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural @@ -451,7 +480,7 @@ \i\fs26 \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls24\ilvl0 +\ls27\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }New scripting command to read in notes from a separate notes file.\ {\listtext \'95 }Scripting support for bookmarks.\ {\listtext \'95 }Embed new skimpdf command line tool to manipulate PDFs with attached notes.\ @@ -465,7 +494,7 @@ \i\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls25\ilvl0 +\ls28\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Fully hide split PDF view when removing it while it's closed.\ {\listtext \'95 }Keep position in split PDF when re-showing it.\ {\listtext \'95 }Support email through Mailplane, Postbox, and PostboxExpress.\ @@ -484,7 +513,7 @@ {\listtext \'95 }Fix Spanish localization of line inspector.\ {\listtext \'95 }Fix keywords in Info panel.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls26\ilvl0\cf0 \ +\ls29\ilvl0\cf0 \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \f0\b\fs28 \cf0 Changes since 1.3.7\ @@ -494,12 +523,12 @@ \i\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls27\ilvl0 +\ls30\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Fix fullscreen window placement on secondary screens.\ {\listtext \'95 }More improvements to fullscreen suport.\ {\listtext \'95 }Reenable font menu shortcuts.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls28\ilvl0\cf0 \ +\ls31\ilvl0\cf0 \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \f0\b\fs28 \cf0 Changes since 1.3.6\ @@ -509,7 +538,7 @@ \i\fs26 \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls29\ilvl0 +\ls32\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Added Polish localization (thanks Adam Strzelecki!).\ {\listtext \'95 }New hidden preference to disable all animations.\ {\listtext \'95 }Improvements to bookmark management, allow dropping files, allow changing page, support .skim, and autosave columns.\ @@ -524,7 +553,7 @@ \i\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls30\ilvl0 +\ls33\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Fix page count in info window.\ {\listtext \'95 }Fix some names of presentation page transitions.\ {\listtext \'95 }Help on modifying line attributes.\ @@ -533,7 +562,7 @@ {\listtext \'95 }Update notes table when note color changes.\ {\listtext \'95 }Fix FDF export on Leopard.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls31\ilvl0\cf0 \ +\ls34\ilvl0\cf0 \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \f0\b\fs28 \cf0 Changes since 1.3.5\ @@ -543,7 +572,7 @@ \i\fs26 \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls32\ilvl0 +\ls35\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Optional Script menu, see the Wiki for details.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural @@ -552,7 +581,7 @@ \i\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls33\ilvl0 +\ls36\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Fix preference for automatic update checking.\ {\listtext \'95 }Fix preference control for PDF-TeX synchronization preset.\ {\listtext \'95 }Don't show PDF previews in presentation mode.\ @@ -562,7 +591,7 @@ {\listtext \'95 }Fix info window on Leopard.\ {\listtext \'95 }Search TeX editor in application bundle first.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls34\ilvl0\cf0 \ +\ls37\ilvl0\cf0 \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \f0\b\fs28 \cf0 Changes since 1.3.4\ @@ -572,7 +601,7 @@ \i\fs26 \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls35\ilvl0 +\ls38\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Custom cursors for note tool modes are now only used based on a hidden preference.\ {\listtext \'95 }Extended Font submenu now in the Edit menu.\ {\listtext \'95 }Support for extended DVI (XDV) format.\ @@ -583,7 +612,7 @@ \i\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls36\ilvl0 +\ls39\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Don't hide full screen window when deactivating Skim.\ {\listtext \'95 }Fix creating notes with properties from AppleScript.\ {\listtext \'95 }Fix a potential leak.\ @@ -593,7 +622,7 @@ {\listtext \'95 }Allow resizing new notes from note tools in all directions.\ {\listtext \'95 }Don't add extra separators in windows menu.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls37\ilvl0\cf0 \ +\ls40\ilvl0\cf0 \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \f0\b\fs28 \cf0 Changes since 1.3.3\ @@ -603,7 +632,7 @@ \i\fs26 \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls38\ilvl0 +\ls41\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Indicate note tool mode in cursor.\ {\listtext \'95 }Support for modification date of notes, and creator name through hidden default.\ {\listtext \'95 }New hidden preference for page background color.\ @@ -615,7 +644,7 @@ \i\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls39\ilvl0 +\ls42\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Avoid "empty" search field after an animation.\ {\listtext \'95 }Fix updating preview tool tips after changing pages.\ {\listtext \'95 }Allow multiple full screen documents without overlapping side panels.\ @@ -626,7 +655,7 @@ {\listtext \'95 }Remove search criteria and quotes from spotlight search term before using it.\ {\listtext \'95 }Use helvetica italic for quicklook preview of .skim files.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls40\ilvl0\cf0 \ +\ls43\ilvl0\cf0 \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \f0\b\fs28 \cf0 Changes since 1.3.2\ @@ -636,7 +665,7 @@ \i\fs26 \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls41\ilvl0 +\ls44\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Use standard status bar and divider styles and animate dividers.\ {\listtext \'95 }Hitting Enter in tables simulates double-click, hitting Space scrolls.\ {\listtext \'95 }Allow exporting PDFs that were encrypted with embedded notes, at least when PDFkit lets us.\ @@ -649,7 +678,7 @@ \i\fs26 \cf0 Bugs Fixed\ \ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls42\ilvl0 +\ls45\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Show colors in table for .skim documents.\ {\listtext \'95 }Try to display the full page when scrolling to a find result.\ {\listtext \'95 }Make sure the window title is synchronized when leaving full screen or presentation mode.\ @@ -669,7 +698,7 @@ \i\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls43\ilvl0 +\ls46\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Fix offset of color swatches in notes table.\ {\listtext \'95 }Fix mixup of cursor images.\ {\listtext \'95 }Update colors for history highlighting when key state changes.\ @@ -692,7 +721,7 @@ \i\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls44\ilvl0 +\ls47\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Fix a crasher when opening encrypted PDFs on Leopard.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural @@ -710,7 +739,7 @@ \i\fs26 \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls45\ilvl0 +\ls48\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }64-bit support on Snow Leopard, unfortunately Leopards 64-bit binaries are too buggy.\ {\listtext \'95 }Always reopen the last open files after an automated update.\ {\listtext \'95 }Allow clicking links below the reading bar.\ @@ -724,7 +753,7 @@ \i\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls46\ilvl0 +\ls49\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Better method to prevent sleep during presentations.\ {\listtext \'95 }Make sure the main PDF view gets focus on mouse down, and use it as the default target for some Edit commands.\ {\listtext \'95 }Avoid using empty selections, which could lead to various problems on 10.6.\ @@ -737,7 +766,7 @@ {\listtext \'95 }Workaround for a 10.6 bug that scrolled to the first page after a display mode change.\ {\listtext \'95 }Prevent black edges around pages in presentation page transitions.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls47\ilvl0\cf0 \ +\ls50\ilvl0\cf0 \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \f0\b\fs28 \cf0 Changes since 1.2.6\ @@ -747,7 +776,7 @@ \i\fs26 \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls48\ilvl0 +\ls51\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Set the text color of a text note from the favorite colors when holding the Option key.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural @@ -756,13 +785,13 @@ \i\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls49\ilvl0 +\ls52\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Enable new note menu items.\ {\listtext \'95 }Smooth images when anti-aliasing.\ {\listtext \'95 }Fix initialization of saved line style of notes.\ {\listtext \'95 }Workaround for 10.6 scrolling back to the first page after a display mode change.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls50\ilvl0\cf0 \ +\ls53\ilvl0\cf0 \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \f0\b\fs28 \cf0 Changes since 1.2.5\ @@ -772,13 +801,13 @@ \i\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls51\ilvl0 +\ls54\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Fix toolbar images for 10.6.\ {\listtext \'95 }Fix AppleScript support for selections and highlights on 10.6.\ {\listtext \'95 }Fix a bug that sometimes created huge notes on 10.6.\ {\listtext \'95 }Avoid a hang due to tooltips of notes starting with spaces.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls52\ilvl0\cf0 \ +\ls55\ilvl0\cf0 \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \f0\b\fs28 \cf0 Changes since 1.2.4\ @@ -788,7 +817,7 @@ \i\fs26 \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls53\ilvl0 +\ls56\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Select a square when holding the Shift key.\ {\listtext \'95 }New option to TeX-PDF sync AppleScript "go to" command and displayline script to show the reading bar instead of selecting.\ {\listtext \'95 }Enable PDF-TeX sync in the Snapshots and Split-PDF.\ @@ -804,7 +833,7 @@ \f0\i\b\fs26 \cf0 \ Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls54\ilvl0 +\ls57\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Fix localized document type names.\ {\listtext \'95 }Don't select in Presentation mode when using TeX-PDF sync.\ {\listtext \'95 }Make sure tool tip rects are reset when the page changes.\ @@ -813,7 +842,7 @@ {\listtext \'95 }Safer editing registration to avoid possible crashers.\ {\listtext \'95 }Remove PDF With Embedded Notes export option for encrypted PDFs.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls55\ilvl0\cf0 \ +\ls58\ilvl0\cf0 \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \f0\b\fs28 \cf0 Changes since 1.2.3\ @@ -823,7 +852,7 @@ \i\fs26 \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls56\ilvl0 +\ls59\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }The Split PDF feature is now also available in Full Screen mode.\ {\listtext \'95 }You can now open folders containing files Skim recognizes.\ {\listtext \'95 }New hidden preference to hide full screen side panels when they are closed.\ @@ -834,7 +863,7 @@ \f0\i\b\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls57\ilvl0 +\ls60\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Always enable zoom slider in full screen navigation controls.\ {\listtext \'95 }Continuously auto-scroll during certain drags.\ {\listtext \'95 }Fix reopening documents from a session bookmark.\ @@ -855,7 +884,7 @@ \i\fs26 \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls58\ilvl0 +\ls61\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }You can now save PostScript and DVI with attached Skim notes.\ {\listtext \'95 }Change hidden default for the full screen and presentation navigation behavior, allow disabling it.\ {\listtext \'95 }Add a zoom slider in the full screen navigation controls.\ @@ -864,7 +893,7 @@ \f0\i\b\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls59\ilvl0 +\ls62\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Workaround for Leopard's buggy identification of file types.\ {\listtext \'95 }Fix selection behavior of toolbar buttons on Tiger.\ {\listtext \'95 }Fix activation of line wells in notes preferences.\ @@ -880,7 +909,7 @@ \i\fs26 \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls60\ilvl0 +\ls63\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Update Sparkle updating framework and use signed updates.\ {\listtext \'95 }Use source list style colors on Leopard.\ {\listtext \'95 }Reduce effective width for hit testing of line and freehand notes.\ @@ -891,7 +920,7 @@ \f0\i\b\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls61\ilvl0 +\ls64\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Fix some leaks.\ {\listtext \'95 }Workaround for Apple bugs in AppleScript support for selection specifiers.\ {\listtext \'95 }Fix AppleScript grab command.\ @@ -913,7 +942,7 @@ \i\fs26 \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls62\ilvl0 +\ls65\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Add preset for synchronization with TeXMaker and AlphaX.\ {\listtext \'95 }New AppleScript command to convert PDF annotations to Skim notes.\ {\listtext \'95 }Handle PDF files in Skim's Spotlight importer, so Skim notes can be searched.\ @@ -929,7 +958,7 @@ \f0\i\b\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls63\ilvl0 +\ls66\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Rotate pages in the correct direction using gestures.\ {\listtext \'95 }Use larger margins around selectable text.\ {\listtext \'95 }Show find panel on the current space.\ @@ -961,7 +990,7 @@ \i\fs26 \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls64\ilvl0 +\ls67\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }New freehand note type, only supported through tool mode.\ {\listtext \'95 }Allow choosing an associated document with presentation notes to be navigated simultaneous with the presentation. Requires a 1-to-1 correspondence of pages.\ {\listtext \'95 }Improvements to notes document. Support searching, printing, and multiple selections.\ @@ -979,7 +1008,7 @@ \f0\i\b\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls65\ilvl0 +\ls68\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Fix open script command on Tiger.\ {\listtext \'95 }Fix PDF-TeX backward search for the Aquamacs Emacs preset.\ {\listtext \'95 }Fix saving of anchored notes from a notes document.\ @@ -1010,7 +1039,7 @@ \i\fs26 \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls66\ilvl0 +\ls69\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Allow editing the text of generic non-anchored notes using a little window.\ {\listtext \'95 }New bookmark to save the current session.\ {\listtext \'95 }New bookmark for a file including full setup. Hold down Shift and Option to see the menu item.\ @@ -1019,12 +1048,12 @@ {\listtext \'95 }Renamed hidden default to use sequential instead of logical page numbering.\ {\listtext \'95 }Expand some table of contents items initially.\ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural -\ls66\ilvl0\cf0 \ +\ls69\ilvl0\cf0 \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \f0\i\b\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls67\ilvl0 +\ls70\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Improvement to finding the editor script for a preset synchronization, fixes sync for BBEdit.\ {\listtext \'95 }Remove incomplete Italian localization.\ {\listtext \'95 }Avoid empty window titles for note windows.\ @@ -1043,13 +1072,13 @@ \f0\b\fs28 \cf0 Changes since 1.1.11\ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural -\ls68\ilvl0 +\ls71\ilvl0 \f1\b0\fs22 \cf0 \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \f0\i\b\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls69\ilvl0 +\ls72\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Fix loading of notes.\ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \cf0 \ @@ -1057,21 +1086,21 @@ \f0\b\fs28 \cf0 Changes since 1.1.10\ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural -\ls70\ilvl0 +\ls73\ilvl0 \f1\b0\fs22 \cf0 \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \f0\i\b\fs26 \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls71\ilvl0 +\ls74\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }New hidden default to disable animated search highlights.\ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural -\ls72\ilvl0\cf0 \ +\ls75\ilvl0\cf0 \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \f0\i\b\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls73\ilvl0 +\ls76\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Don't reopen last open file when reactivating Skim.\ {\listtext \'95 }Fix DVI conversion.\ {\listtext \'95 }Fix SyncTeX support.\ @@ -1088,11 +1117,11 @@ \f0\b\fs28 \cf0 Changes since 1.1.9\ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural -\ls74\ilvl0 +\ls77\ilvl0 \i\fs26 \cf0 \ Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls74\ilvl0 +\ls77\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Use correct separator in extended attribute names.\ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \cf0 \ @@ -1100,25 +1129,25 @@ \f0\b\fs28 \cf0 Changes since 1.1.8\ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural -\ls75\ilvl0 +\ls78\ilvl0 \f1\b0\fs22 \cf0 \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \f0\i\b\fs26 \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls76\ilvl0 +\ls79\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Remember last used export types for Skim note files.\ {\listtext \'95 }New hidden preference to autosave a document.\ {\listtext \'95 }Add support for SyncTeX. Thanks Jerome Laurens for providing the SyncTeX parser.\ {\listtext \'95 }New hidden preference to use logical page numbering.\ {\listtext \'95 }Improvements to skimnotes tool.\ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural -\ls77\ilvl0\cf0 \ +\ls80\ilvl0\cf0 \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \f0\i\b\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls78\ilvl0 +\ls81\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Prevent calling Leopard-only methods. This fixes a bug that prevented Export and Save As on Tiger.\ {\listtext \'95 }Make sure the last chosen export type is remembered only for Export.\ {\listtext \'95 }Workaround for a system leak when loading appcasts for update checking.\ @@ -1131,21 +1160,21 @@ \f0\b\fs28 \cf0 Changes since 1.1.7\ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural -\ls79\ilvl0 +\ls82\ilvl0 \f1\b0\fs22 \cf0 \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \f0\i\b\fs26 \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls80\ilvl0 +\ls83\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }You can now copy information about search results from the tables.\ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural -\ls81\ilvl0\cf0 \ +\ls84\ilvl0\cf0 \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \f0\i\b\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls82\ilvl0 +\ls85\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Initializes line notes with default properties.\ {\listtext \'95 }Bring back children for anchored note text in note table.\ {\listtext \'95 }Ignore errors when reading notes due to unsupported extended attributes.\ @@ -1158,13 +1187,13 @@ \f0\b\fs28 \cf0 Changes since 1.1.6\ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural -\ls83\ilvl0 +\ls86\ilvl0 \f1\b0\fs22 \cf0 \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \f0\i\b\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls84\ilvl0 +\ls87\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Fix writing large data for Skim notes to extended attributes.\ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \cf0 \ @@ -1172,13 +1201,13 @@ \f0\b\fs28 \cf0 Changes since 1.1.5\ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural -\ls85\ilvl0 +\ls88\ilvl0 \f1\b0\fs22 \cf0 \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \f0\i\b\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls86\ilvl0 +\ls89\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Fix reading PDF bundles.\ {\listtext \'95 }Fix saving notes to PDF files.\ {\listtext \'95 }Fix drawing highlights on Tiger.\ @@ -1201,7 +1230,7 @@ \i\fs26 \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls87\ilvl0 +\ls90\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Presentation page transitions now set an optional angle depending on the direction. Some transitions on the Wiki have been updated.\ {\listtext \'95 }New hidden defaults for the default note text. See the Wiki for details.\ {\listtext \'95 }Add accessibility for the status bar.\ @@ -1217,12 +1246,12 @@ {\listtext \'95 }Update skimnotes tool.\ {\listtext \'95 }New hidden preference to match the zoom of the split PDF to the main PDF.\ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural -\ls87\ilvl0\cf0 \ +\ls90\ilvl0\cf0 \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \f0\i\b\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls88\ilvl0 +\ls91\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Disable preview tool tip when Skim is not active.\ {\listtext \'95 }Connect markup for text with missing spaces.\ {\listtext \'95 }Update preview tool tips more often, in particular after scrolling.\ @@ -1255,17 +1284,17 @@ \i\fs26 \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls89\ilvl0 +\ls92\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Go to selected note from table using Enter key.\ {\listtext \'95 }Many improvements to accessibility. Add accessibility information to toolbar buttons, and to notes and links in the PDF.\ {\listtext \'95 }Use Control-Option-arrow to resize notes to avoid conflict with Spaces.\ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural -\ls89\ilvl0\cf0 \ +\ls92\ilvl0\cf0 \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \f0\i\b\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls90\ilvl0 +\ls93\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Fix crasher on Tiger due to font preference control.\ {\listtext \'95 }Fix undo of text for anchored note.\ {\listtext \'95 }Open PDF with wrong extension as PDF instead of PostScript.\ @@ -1283,7 +1312,7 @@ \i\fs26 \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls91\ilvl0 +\ls94\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Allow copying text for multiple notes from the note tables.\ {\listtext \'95 }Remember snapshot window locations when rebuilding snapshots on reload and reopening a file.\ {\listtext \'95 }Allow opening PDFs with any unrecognized file extension.\ @@ -1298,13 +1327,13 @@ {\listtext \'95 }You can now set the fill color of circles and boxes using drag and drop by holding down the Option key.\ {\listtext \'95 }Use system font panel to choose default fonts, allows choosing font with traits.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls91\ilvl0 +\ls94\ilvl0 \f0\b\fs28 \cf0 \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \i\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls92\ilvl0 +\ls95\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Allow removing selection from a search in certain tool modes.\ {\listtext \'95 }Avoid warning when saving PDF bundle on Leopard.\ {\listtext \'95 }Fix a crasher when cropping pages.\ @@ -1329,17 +1358,17 @@ \i\fs26 \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls93\ilvl0 +\ls96\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Use dark toolbar images on Tiger.\ {\listtext \'95 }Allow printing without dialog from AppleScript.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls93\ilvl0 +\ls96\ilvl0 \f0\b\fs28 \cf0 \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \i\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls94\ilvl0 +\ls97\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Fix opening DVI files.\ {\listtext \'95 }Allow opening linked PDFs from notes document.\ {\listtext \'95 }Fix printing on Tiger.\ @@ -1356,10 +1385,10 @@ \i\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls95\ilvl0 +\ls98\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Fix printing problems.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls96\ilvl0\cf0 {\listtext \'95 }Reinsert missing toolbar icons.\ +\ls99\ilvl0\cf0 {\listtext \'95 }Reinsert missing toolbar icons.\ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \cf0 \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural @@ -1371,7 +1400,7 @@ \i\fs26 \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls97\ilvl0 +\ls100\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Navigate through pages using left/right arrow buttons when there is no horizontal scroll bar.\ {\listtext \'95 }Add alternate menu item to navigate synchronously in all open documents (use Control).\ {\listtext \'95 }More consistent and Leopard compatible toolbar buttons.\ @@ -1390,7 +1419,7 @@ \i\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls98\ilvl0 +\ls101\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Remove Spotlight search criteria from initial search string. \ {\listtext \'95 }Use more reliable method to determine whether to use metric units.\ {\listtext \'95 }Don't round off scaling of snapshots.\ @@ -1415,7 +1444,7 @@ \i\fs26 \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls99\ilvl0 +\ls102\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Add hidden defaults for modifiers of reading bar navigation and resizing shortcuts.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural @@ -1424,7 +1453,7 @@ \i\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls100\ilvl0 +\ls103\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Revert shortcuts for reading bar navigation and resizing shortcuts to Option-arrow and Shift-Option-arrow.\ {\listtext \'95 }Rename some AppleScript properties of default line styles to avoid conflicts.\ {\listtext \'95 }Avoid tracking rects during load. Fixes a bug that prevented loading of some PDFs.\ @@ -1441,7 +1470,7 @@ \i\fs26 \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls101\ilvl0 +\ls104\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Use page label when present in default export template rather than page index + 1.\ {\listtext \'95 }Hidden default to remove reload alert. Use at your own risk.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural @@ -1451,7 +1480,7 @@ \i\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls102\ilvl0 +\ls105\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Finally avoid a Leopard bug that often led to blank windows.\ {\listtext \'95 }Improvements to Fit To PDF.\ {\listtext \'95 }Printing from snapshots now prints the document.\ @@ -1467,7 +1496,7 @@ \i\fs26 \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls103\ilvl0 +\ls106\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Setting to auto-rotate printed pages in the Page Setup sheet now sticks for new documents and between sessions.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural @@ -1476,7 +1505,7 @@ \i\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls104\ilvl0 +\ls107\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Make sure relative links are completed. Fix an Apple crasher for relative links.\ {\listtext \'95 }Fix file extension for initial choice of exported file type in Leopard.\ {\listtext \'95 }Fix crashing bugs Spanish localization.\ @@ -1491,7 +1520,7 @@ \i\fs26 \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls105\ilvl0 +\ls108\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Automatically select the proper paper size in the print info.\ {\listtext \'95 }Add support for Keyspan Frontrow remote control.\ {\listtext \'95 }Change the shortcuts for moving and resizing of the reading bar to avoid conflicts with Spaces on Leopard.\ @@ -1507,7 +1536,7 @@ \i\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls106\ilvl0 +\ls109\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Really prevent selection in Leopard for context menu.\ {\listtext \'95 }Fix remote control support.\ {\listtext \'95 }Fix empty thumbnails that could sometimes occur.\ @@ -1533,7 +1562,7 @@ \i\fs26 \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls107\ilvl0 +\ls110\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Allow grouping search result by page.\ {\listtext \'95 }Allow multiple selection in note table.\ {\listtext \'95 }Add script to SharedSupport in Skim bundle to create a disk image, used by Save Disk Image.\ @@ -1550,7 +1579,7 @@ \i\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls108\ilvl0 +\ls111\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Use font size from defaults in bookmarks table.\ {\listtext \'95 }Toggle utility panels instead of only showing them.\ {\listtext \'95 }Don't select for a contextual menu on Leopard for tool modes ather than Text Tool Mode.\ @@ -1581,7 +1610,7 @@ \i\fs26 \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls109\ilvl0 +\ls112\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Add an alternative page toolbar item with buttons to go to the first or last page.\ {\listtext \'95 }Rotate preview tool tip for rotated pages.\ {\listtext \'95 }Hidden default to automatically reload files changed on disk without notes. Use at your own risk.\ @@ -1601,7 +1630,7 @@ \i\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls110\ilvl0 +\ls113\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Fix button autoresizing in French update window.\ {\listtext \'95 }Update status bar after reloading.\ {\listtext \'95 }Fix remaining reading bar when moving it at top or bottom of page.\ @@ -1632,7 +1661,7 @@ \i\fs26 \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls111\ilvl0 +\ls114\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Support for smaller comparison condition in templates.\ {\listtext \'95 }Hide preview tool tip after a few seconds.\ {\listtext \'95 }Make reading bar resizable, drag the bottom of the bar or use Control-Option-arrow keys.\ @@ -1644,7 +1673,7 @@ \i\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls112\ilvl0 +\ls115\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Fix French and Italian localization of bookmarks window.\ {\listtext \'95 }Respect stickyness of closed contents pane, unless table of contents should always be shown.\ {\listtext \'95 }Don't search for an empty string, as this leads to a crash.\ @@ -1664,7 +1693,7 @@ \i\fs26 \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls113\ilvl0 +\ls116\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Make reading notes from .skim or .fdf files undoable.\ {\listtext \'95 }Allow saving passwords for protected files in the keychain.\ {\listtext \'95 }Organize bookmarks with folders and separators.\ @@ -1679,7 +1708,7 @@ \i\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls114\ilvl0 +\ls117\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Don't use transparent background color text note editing, as the black background shines through.\ {\listtext \'95 }Show progress sheet when reverting a document, so you access the document and crash during reload.\ {\listtext \'95 }The contents pane is now always opened, unless the file has no TOC and you have chosen so in the preferences.\ @@ -1697,7 +1726,7 @@ \i\fs26 \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls115\ilvl0 +\ls118\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Allow copying and auto-resizing rows in note documents.\ {\listtext \'95 }Allow viewing FDF files in Skim.\ {\listtext \'95 }Add a status bar to document window for notes.\ @@ -1710,7 +1739,7 @@ \i\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls116\ilvl0 +\ls119\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Really save FDF data in bundle.\ {\listtext \'95 }Fix a crasher in the skim notes window.\ {\listtext \'95 }Try to reconstruct split of short contents and larger text in anchored notes from FDF files.\ @@ -1727,7 +1756,7 @@ \i\fs26 \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls117\ilvl0 +\ls120\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Use blue background for some tables.\ {\listtext \'95 }Name files inside a bundle the same as the bundle.\ {\listtext \'95 }Add contextual menu items to note window to auto-size a single row or all rows.\ @@ -1741,7 +1770,7 @@ \i\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls118\ilvl0 +\ls121\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Always use the current selection for snapshots when available.\ {\listtext \'95 }Show full size of the content of a PDF bundle in info window.\ {\listtext \'95 }Fix a crasher when loading a password protected file.\ @@ -1761,7 +1790,7 @@ \i\fs26 \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls119\ilvl0 +\ls122\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Hold down Shift key while moving the end points of a line to restrict the angle of a line to multiples of 45 degrees.\ {\listtext \'95 }You can now save the PDF and notes together in a bundle. This format is safe for email and version control.\ {\listtext \'95 }Notes in PDF bundles can be searched through Spotlight.\ @@ -1782,7 +1811,7 @@ \i\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls120\ilvl0 +\ls123\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Add white outline to magnify cursors so they are visible on a dark background.\ {\listtext \'95 }Adjust the size of page columns so they use as little space as possible.\ {\listtext \'95 }Periodically save current documents, so the last open files can be opened after a crash.\ @@ -1805,7 +1834,7 @@ \i\fs26 \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls121\ilvl0 +\ls124\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }You can now resize all rows of the notes table to view the full text.\ {\listtext \'95 }PDFSync from the editor now shows an indication of the target location.\ {\listtext \'95 }The tool tip of the table of contents and the table of search results now shows a preview of the target location.\ @@ -1829,7 +1858,7 @@ \i\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls122\ilvl0 +\ls125\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Fix spell checking freeze for single page PDFs.\ {\listtext \'95 }Selecting text is now completely disabled in presentation mode.\ {\listtext \'95 }Changed shortcuts of Search PDF and Presentation to be consistent with other application.\ @@ -1860,12 +1889,12 @@ \i\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls123\ilvl0 +\ls126\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Fix updater.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls124\ilvl0\cf0 {\listtext \'95 }Make sure side panes are opened at the saved widths.\ +\ls127\ilvl0\cf0 {\listtext \'95 }Make sure side panes are opened at the saved widths.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls125\ilvl0\cf0 {\listtext \'95 }Fix a typo in the scripting dictionary.\ +\ls128\ilvl0\cf0 {\listtext \'95 }Fix a typo in the scripting dictionary.\ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \cf0 \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural @@ -1877,7 +1906,7 @@ \i\fs26 \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls126\ilvl0 +\ls129\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Default print settings automatically choose landscape for wide pages.\ {\listtext \'95 }Hidden preference for custom dvi conversion utilitiesto read DVI (e.g. dvips).\ {\listtext \'95 }You can now spell-check a PDF.\ @@ -1887,7 +1916,7 @@ {\listtext \'95 }New View menu item to show the file at the real size at which it would be printed.\ {\listtext \'95 }Added a Speech menu to Edit menu.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls127\ilvl0\cf0 {\listtext \'95 }Added keyboard shortcuts 'p' and 'a' to toggle pages and auto-resize in presentation mode.\ +\ls130\ilvl0\cf0 {\listtext \'95 }Added keyboard shortcuts 'p' and 'a' to toggle pages and auto-resize in presentation mode.\ {\listtext \'95 }Added French localization. (Thanks Corentin Cras-M\'e9neur!)\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural @@ -1896,7 +1925,7 @@ \i\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls128\ilvl0 +\ls131\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Correct display of zero line width in Line inspector panel.\ {\listtext \'95 }Fix broken Note preferences in Italian localization.\ {\listtext \'95 }Improved security for PDFSync, escape special shell characters.\ @@ -1909,7 +1938,7 @@ {\listtext \'95 }Fix layout issues in main window.\ {\listtext \'95 }Reopen snapshots after a reload at the correct zoom factor.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls129\ilvl0\cf0 {\listtext \'95 }Notes sorted by contents ignores case and uses numeric compare.\ +\ls132\ilvl0\cf0 {\listtext \'95 }Notes sorted by contents ignores case and uses numeric compare.\ {\listtext \'95 }Ignore empty Spotlight search text.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural @@ -1922,7 +1951,7 @@ \i\fs26 \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls130\ilvl0 +\ls133\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Added some more sorting keys for use in text export templates.\ {\listtext \'95 }Reorganized document info window, with some new properties.\ {\listtext \'95 }You can now navigate through a presentation using mouse clicks.\ @@ -1930,9 +1959,9 @@ {\listtext \'95 }Added an optional status bar, displaying the page number, number and pages, as well as informatino about the tool mode, if it applies.\ {\listtext \'95 }You can now print documents from AppleScript.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls131\ilvl0\cf0 {\listtext \'95 }Pdfsync from AppleScript now goes separately through the go command instead of the open command.\ +\ls134\ilvl0\cf0 {\listtext \'95 }Pdfsync from AppleScript now goes separately through the go command instead of the open command.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls132\ilvl0\cf0 {\listtext \'95 }You can now quickly rotate through tool modes using Shift-modified arrow keys.\ +\ls135\ilvl0\cf0 {\listtext \'95 }You can now quickly rotate through tool modes using Shift-modified arrow keys.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural \f0\b\fs28 \cf0 \ @@ -1940,7 +1969,7 @@ \i\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls133\ilvl0 +\ls136\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Prevent chaching of update info for updater.\ {\listtext \'95 }Fix the default text export templates.\ {\listtext \'95 }Allow other active application windows in front of Skim in presentation mode.\ @@ -1963,7 +1992,7 @@ \i\fs26 \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls134\ilvl0 +\ls137\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }You can now hide all notes and highlights.\ {\listtext \'95 }Remember last exported type.\ {\listtext \'95 }Keyboard shortcut for Export.\ @@ -1981,13 +2010,13 @@ {\listtext \'95 }You can now change the icon type of anchored notes from the note's window to some standard proofreader marks.\ {\listtext \'95 }Hidden default for icon type of anchored notes (SKAnchoredNoteiconType).\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls135\ilvl0\cf0 {\listtext \'95 }Skim now saves the file type and creator code.\ +\ls138\ilvl0\cf0 {\listtext \'95 }Skim now saves the file type and creator code.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls136\ilvl0\cf0 {\listtext \'95 }The reading bar is now shown on the thumbnails.\ +\ls139\ilvl0\cf0 {\listtext \'95 }The reading bar is now shown on the thumbnails.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls137\ilvl0\cf0 {\listtext \'95 }Add border/line properties to circle, box, text and line notes. Accessible through a new inspector panel and AppleScript.\ +\ls140\ilvl0\cf0 {\listtext \'95 }Add border/line properties to circle, box, text and line notes. Accessible through a new inspector panel and AppleScript.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls138\ilvl0\cf0 {\listtext \'95 }Allow setting the interior (fill) color for circles and boxes. Select the check button at the bottom of the color panel.\ +\ls141\ilvl0\cf0 {\listtext \'95 }Allow setting the interior (fill) color for circles and boxes. Select the check button at the bottom of the color panel.\ {\listtext \'95 }Add a TeX editor perset for LyX.\ {\listtext \'95 }You can now reopen snapshots from a previous run.\ {\listtext \'95 }New preferences for line styles and interior colors.\ @@ -2002,7 +2031,7 @@ \i\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls139\ilvl0 +\ls142\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Use old-style check for network availability for the updater, as the newer API is not reliable for dial-up connections.\ {\listtext \'95 }Never add a new note on a click in note tool mode, because undoing such an addition can also remove a text edit in progress.\ {\listtext \'95 }Update the window title when the document is reloaded; the number of pages can change. \ @@ -2012,7 +2041,7 @@ {\listtext \'95 }Add help about cropping pages.\ {\listtext \'95 }Start and end points for arrow notes in AppleScript are now relative to the page, and changing them automatically changes the bounds.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls140\ilvl0\cf0 {\listtext \'95 }The side panels in full screen mode are now hidden when you switch to another application.\ +\ls143\ilvl0\cf0 {\listtext \'95 }The side panels in full screen mode are now hidden when you switch to another application.\ {\listtext \'95 }Renamed "Arrow" to "Line", as it now allows more general line styles. Also change some keyboard shortcuts.\ {\listtext \'95 }Enable Password menu item for encrypted files that are flagged as unlocked, as the latter is unreliable in PDFKit.\ {\listtext \'95 }Fix tab-loop for PDFs with fiallable forms. Also add some help about fillable forms.\ @@ -2035,7 +2064,7 @@ \i\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls141\ilvl0 +\ls144\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Fixed installation of new versions by updater.\ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural @@ -2047,50 +2076,50 @@ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls142\ilvl0 +\ls145\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Add a menu item in the Help menu to visit the web site.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls143\ilvl0\cf0 {\listtext \'95 }Add single-character shortcuts to change the note style in note mode (t, n, c, b, h, u, s, a).\ +\ls146\ilvl0\cf0 {\listtext \'95 }Add single-character shortcuts to change the note style in note mode (t, n, c, b, h, u, s, a).\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls144\ilvl0\cf0 {\listtext \'95 }Fix PDFSync support to work with file names containing spaces.\ +\ls147\ilvl0\cf0 {\listtext \'95 }Fix PDFSync support to work with file names containing spaces.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls145\ilvl0\cf0 {\listtext \'95 }Add hidden default for activation of navigation buttons in presentation mode (SKActivatePresentationNavigationAtBottom).\ +\ls148\ilvl0\cf0 {\listtext \'95 }Add hidden default for activation of navigation buttons in presentation mode (SKActivatePresentationNavigationAtBottom).\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls146\ilvl0\cf0 {\listtext \'95 }Start search using the find panel at the current page when there is no selection.\ +\ls149\ilvl0\cf0 {\listtext \'95 }Start search using the find panel at the current page when there is no selection.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls147\ilvl0\cf0 {\listtext \'95 }Wrap selection using the find panel.\ +\ls150\ilvl0\cf0 {\listtext \'95 }Wrap selection using the find panel.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls148\ilvl0\cf0 {\listtext \'95 }Add support for apple remote control. It can be disabled through the hidden default SKEnableAppleRemote.\ +\ls151\ilvl0\cf0 {\listtext \'95 }Add support for apple remote control. It can be disabled through the hidden default SKEnableAppleRemote.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls149\ilvl0\cf0 {\listtext \'95 }Hidden defaults for line ending style of arrows (SKLineNoteStartLineStyle, SKLineNoteEndLineStyle).\ +\ls152\ilvl0\cf0 {\listtext \'95 }Hidden defaults for line ending style of arrows (SKLineNoteStartLineStyle, SKLineNoteEndLineStyle).\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls150\ilvl0\cf0 {\listtext \'95 }Hidden pref option for reading missing notes from separate .skim file (SKReadMissingNotesFromSkimFileOption). \ +\ls153\ilvl0\cf0 {\listtext \'95 }Hidden pref option for reading missing notes from separate .skim file (SKReadMissingNotesFromSkimFileOption). \ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls151\ilvl0\cf0 {\listtext \'95 }You can now open the corresponding PDF from a Skim Notes document.\ +\ls154\ilvl0\cf0 {\listtext \'95 }You can now open the corresponding PDF from a Skim Notes document.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls152\ilvl0\cf0 {\listtext \'95 }Skim can now read TIFF images from the clipboard.\ +\ls155\ilvl0\cf0 {\listtext \'95 }Skim can now read TIFF images from the clipboard.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls153\ilvl0\cf0 {\listtext \'95 }New select tool. Allows you to copy PDF and TIFF images from a section of a page.\ +\ls156\ilvl0\cf0 {\listtext \'95 }New select tool. Allows you to copy PDF and TIFF images from a section of a page.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls154\ilvl0\cf0 {\listtext \'95 }You can now search Skim note files from Spotlight.\ +\ls157\ilvl0\cf0 {\listtext \'95 }You can now search Skim note files from Spotlight.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls155\ilvl0\cf0 {\listtext \'95 }New Crop menu items and toolbar button.\ +\ls158\ilvl0\cf0 {\listtext \'95 }New Crop menu items and toolbar button.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls156\ilvl0\cf0 {\listtext \'95 }Cropping and page rotation are now undoable.\ +\ls159\ilvl0\cf0 {\listtext \'95 }Cropping and page rotation are now undoable.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls157\ilvl0\cf0 {\listtext \'95 }Allow reverting a document when it has changed on disk.\ +\ls160\ilvl0\cf0 {\listtext \'95 }Allow reverting a document when it has changed on disk.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls158\ilvl0\cf0 {\listtext \'95 }New menu item to set the selection from the content of the page.\ +\ls161\ilvl0\cf0 {\listtext \'95 }New menu item to set the selection from the content of the page.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls159\ilvl0\cf0 {\listtext \'95 }Hidden defaults for automatic crop box margins (SKAutoCropBoxMarginWidth, SKAutoCropBoxMarginHeight).\ +\ls162\ilvl0\cf0 {\listtext \'95 }Hidden defaults for automatic crop box margins (SKAutoCropBoxMarginWidth, SKAutoCropBoxMarginHeight).\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls160\ilvl0\cf0 {\listtext \'95 }New Zoom To Selection menu item and toolbar button.\ +\ls163\ilvl0\cf0 {\listtext \'95 }New Zoom To Selection menu item and toolbar button.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls161\ilvl0\cf0 {\listtext \'95 }New preference option to open files fit to the PDF.\ +\ls164\ilvl0\cf0 {\listtext \'95 }New preference option to open files fit to the PDF.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls162\ilvl0\cf0 {\listtext \'95 }You can now join markup highlights using shift-click, or by selecting a highlight before adding a new one.\ +\ls165\ilvl0\cf0 {\listtext \'95 }You can now join markup highlights using shift-click, or by selecting a highlight before adding a new one.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls163\ilvl0\cf0 {\listtext \'95 }You can now supply templates for text export of notes. See the wiki for more information.\ +\ls166\ilvl0\cf0 {\listtext \'95 }You can now supply templates for text export of notes. See the wiki for more information.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural \f0\b\fs28 \cf0 \ @@ -2098,26 +2127,26 @@ \i\fs26 \cf0 Bugs Fixed\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls164\ilvl0 +\ls167\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Fix links in help.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls165\ilvl0\cf0 {\listtext \'95 }Don't create a new note in note tool mode on mousedown outside a page.\ +\ls168\ilvl0\cf0 {\listtext \'95 }Don't create a new note in note tool mode on mousedown outside a page.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls166\ilvl0\cf0 {\listtext \'95 }Don't add new resizable notes in note tool mode when just clicking.\ +\ls169\ilvl0\cf0 {\listtext \'95 }Don't add new resizable notes in note tool mode when just clicking.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls167\ilvl0\cf0 {\listtext \'95 }You can now access links that are "hidden" by transparent highlights and arrows.\ +\ls170\ilvl0\cf0 {\listtext \'95 }You can now access links that are "hidden" by transparent highlights and arrows.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls168\ilvl0\cf0 {\listtext \'95 }Scroll reading bar to visible when it is shown.\ +\ls171\ilvl0\cf0 {\listtext \'95 }Scroll reading bar to visible when it is shown.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls169\ilvl0\cf0 {\listtext \'95 }Scroll to previous position on page when reloading PDF.\ +\ls172\ilvl0\cf0 {\listtext \'95 }Scroll to previous position on page when reloading PDF.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls170\ilvl0\cf0 {\listtext \'95 }Escape spaces in TeX editor command.\ +\ls173\ilvl0\cf0 {\listtext \'95 }Escape spaces in TeX editor command.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls171\ilvl0\cf0 {\listtext \'95 }Thumbnails now use the current display box.\ +\ls174\ilvl0\cf0 {\listtext \'95 }Thumbnails now use the current display box.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls172\ilvl0\cf0 {\listtext \'95 }Retry automatic reloading of files changed on disk a few times.\ +\ls175\ilvl0\cf0 {\listtext \'95 }Retry automatic reloading of files changed on disk a few times.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls172\ilvl0 +\ls175\ilvl0 \f0\b\fs28 \cf0 \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \cf0 Changes since 0.2\ @@ -2127,74 +2156,74 @@ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural \cf0 New Features\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls173\ilvl0 +\ls176\ilvl0 \f1\i0\b0\fs22 \cf0 {\listtext \'95 }Add shortcuts for bigger/smaller font sizes.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls174\ilvl0\cf0 {\listtext \'95 }Command-click a snapshot.\ +\ls177\ilvl0\cf0 {\listtext \'95 }Command-click a snapshot.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls175\ilvl0\cf0 {\listtext \'95 }We now print notes and highlights.\ +\ls178\ilvl0\cf0 {\listtext \'95 }We now print notes and highlights.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls176\ilvl0\cf0 {\listtext \'95 }Add copy/cut/paste items to the contextual menu, when they apply.\ +\ls179\ilvl0\cf0 {\listtext \'95 }Add copy/cut/paste items to the contextual menu, when they apply.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls177\ilvl0\cf0 {\listtext \'95 }You can now make a snapshot of a page by Command-clicking a thumbnail.\ +\ls180\ilvl0\cf0 {\listtext \'95 }You can now make a snapshot of a page by Command-clicking a thumbnail.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls178\ilvl0\cf0 {\listtext \'95 }Added Dutch localization.\ +\ls181\ilvl0\cf0 {\listtext \'95 }Added Dutch localization.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls179\ilvl0\cf0 {\listtext \'95 }We now do not leave Full Screen when switching to another application.\ +\ls182\ilvl0\cf0 {\listtext \'95 }We now do not leave Full Screen when switching to another application.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls180\ilvl0\cf0 {\listtext \'95 }Export notes as RTF.\ +\ls183\ilvl0\cf0 {\listtext \'95 }Export notes as RTF.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls181\ilvl0\cf0 {\listtext \'95 }Add preference options for default note/highlight colors and text note font.\ +\ls184\ilvl0\cf0 {\listtext \'95 }Add preference options for default note/highlight colors and text note font.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls182\ilvl0\cf0 {\listtext \'95 }Add menu item to save the current PDF display settings to be used for new documents.\ +\ls185\ilvl0\cf0 {\listtext \'95 }Add menu item to save the current PDF display settings to be used for new documents.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls183\ilvl0\cf0 {\listtext \'95 }Search results from the Find Panel are now also highlighted with a red oval.\ +\ls186\ilvl0\cf0 {\listtext \'95 }Search results from the Find Panel are now also highlighted with a red oval.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls184\ilvl0\cf0 {\listtext \'95 }Select search field when opening the Contents pane in full screen mode.\ +\ls187\ilvl0\cf0 {\listtext \'95 }Select search field when opening the Contents pane in full screen mode.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls185\ilvl0\cf0 {\listtext \'95 }You can now reset all preferences or all preferences in a pane.\ +\ls188\ilvl0\cf0 {\listtext \'95 }You can now reset all preferences or all preferences in a pane.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls186\ilvl0\cf0 {\listtext \'95 }Added Italian localization. (Thanks Andrea Bergia!)\ +\ls189\ilvl0\cf0 {\listtext \'95 }Added Italian localization. (Thanks Andrea Bergia!)\ {\listtext \'95 }Screensaver and sleep are now disabled in Presentation mode.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls187\ilvl0\cf0 {\listtext \'95 }Skim can now return to the last page viewed in a document.\ +\ls190\ilvl0\cf0 {\listtext \'95 }Skim can now return to the last page viewed in a document.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls188\ilvl0\cf0 {\listtext \'95 }Link tool tips now show the top of the text when the link refers to the (empty) top of a page. \ +\ls191\ilvl0\cf0 {\listtext \'95 }Link tool tips now show the top of the text when the link refers to the (empty) top of a page. \ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls189\ilvl0\cf0 {\listtext \'95 }Skim can now also view separate Skim notes (.skim) files.\ +\ls192\ilvl0\cf0 {\listtext \'95 }Skim can now also view separate Skim notes (.skim) files.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls190\ilvl0\cf0 {\listtext \'95 }Using Sparkle for automatic updating. (Thanks Andy Matuschak!)\ +\ls193\ilvl0\cf0 {\listtext \'95 }Using Sparkle for automatic updating. (Thanks Andy Matuschak!)\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls191\ilvl0\cf0 {\listtext \'95 }Display the number of pages in the title bar.\ +\ls194\ilvl0\cf0 {\listtext \'95 }Display the number of pages in the title bar.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls192\ilvl0\cf0 {\listtext \'95 }Skim can now automatically backup a skim notes file whenever it saves a PDF file.\ +\ls195\ilvl0\cf0 {\listtext \'95 }Skim can now automatically backup a skim notes file whenever it saves a PDF file.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls193\ilvl0\cf0 {\listtext \'95 }You can now resize the current note using the arrow keys, when you hold down the Control key.\ +\ls196\ilvl0\cf0 {\listtext \'95 }You can now resize the current note using the arrow keys, when you hold down the Control key.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls194\ilvl0\cf0 {\listtext \'95 }Notes are now ordered according to page and location in page.\ +\ls197\ilvl0\cf0 {\listtext \'95 }Notes are now ordered according to page and location in page.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls195\ilvl0\cf0 {\listtext \'95 }Several improvements of Skim's custom tool-tips.\ +\ls198\ilvl0\cf0 {\listtext \'95 }Several improvements of Skim's custom tool-tips.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls196\ilvl0\cf0 {\listtext \'95 }Add a menu item to select the search field.\ +\ls199\ilvl0\cf0 {\listtext \'95 }Add a menu item to select the search field.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls197\ilvl0\cf0 {\listtext \'95 }You can now add arrows to a PDF document.\ +\ls200\ilvl0\cf0 {\listtext \'95 }You can now add arrows to a PDF document.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls198\ilvl0\cf0 {\listtext \'95 }You can now add notes from external .skim files rather than just overwriting them.\ +\ls201\ilvl0\cf0 {\listtext \'95 }You can now add notes from external .skim files rather than just overwriting them.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls199\ilvl0\cf0 {\listtext \'95 }PDFSync support. See the Wiki for more information.\ +\ls202\ilvl0\cf0 {\listtext \'95 }PDFSync support. See the Wiki for more information.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls200\ilvl0\cf0 {\listtext \'95 }You can now set transparent colors from the color panel. \ +\ls203\ilvl0\cf0 {\listtext \'95 }You can now set transparent colors from the color panel. \ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls201\ilvl0\cf0 {\listtext \'95 }You can now set separate PDF view settings for full screen mode. \ +\ls204\ilvl0\cf0 {\listtext \'95 }You can now set separate PDF view settings for full screen mode. \ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls202\ilvl0\cf0 {\listtext \'95 }Add a Look Up in Dictionary item to the contextual menu.\ +\ls205\ilvl0\cf0 {\listtext \'95 }Add a Look Up in Dictionary item to the contextual menu.\ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural -\ls203\ilvl0\cf0 {\listtext \'95 }You can now undo edits of notes and highlights.\ +\ls206\ilvl0\cf0 {\listtext \'95 }You can now undo edits of notes and highlights.\ {\listtext \'95 }Add a hidden preference (SKActivateFullScreenNavigationAtBottom) to show the navigation buttons in full screen mode only when moving the mouse at the bottom of the screen. \ \pard\tx220\tx720\tx1440\tx2880\tx4320\tx5760\tx7200\li720\fi-720\ql\qnatural @@ Diff output truncated at 100000 characters. @@ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hofman@us...> - 2011-10-08 12:48:34
|
Revision: 7512 http://skim-app.svn.sourceforge.net/skim-app/?rev=7512&view=rev Author: hofman Date: 2011-10-08 12:48:28 +0000 (Sat, 08 Oct 2011) Log Message: ----------- write formatted data immediately Modified Paths: -------------- trunk/SKFormatCommand.m Modified: trunk/SKFormatCommand.m =================================================================== --- trunk/SKFormatCommand.m 2011-10-08 12:32:20 UTC (rev 7511) +++ trunk/SKFormatCommand.m 2011-10-08 12:48:28 UTC (rev 7512) @@ -80,9 +80,8 @@ NSString *ext = [[[file path] pathExtension] lowercaseString]; if ([ext isEqualToString:@"rtfd"]) { [mutableDocAttrs setObject:NSRTFDTextDocumentType forKey:NSDocumentTypeDocumentAttribute]; - [[text RTFDFileWrapperFromRange:NSMakeRange(0, [attrText length]) documentAttributes:mutableDocAttrs] writeToFile:[file path] atomically:YES updateFilenames:NO]; + [[attrText RTFDFileWrapperFromRange:NSMakeRange(0, [attrText length]) documentAttributes:mutableDocAttrs] writeToFile:[file path] atomically:YES updateFilenames:NO]; } else { - NSData *data = nil; NSString *docType = nil; if ([ext isEqualToString:@"rtf"]) docType = NSRTFTextDocumentType; @@ -96,9 +95,8 @@ docType = NSWebArchiveTextDocumentType; if (docType) { [mutableDocAttrs setObject:docType forKey:NSDocumentTypeDocumentAttribute]; - data = [attrText dataFromRange:NSMakeRange(0, [attrText length]) documentAttributes:mutableDocAttrs error:NULL]; + [[attrText dataFromRange:NSMakeRange(0, [attrText length]) documentAttributes:mutableDocAttrs error:NULL] writeToURL:file atomically:YES]; } - [data writeToURL:file atomically:YES]; } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hofman@us...> - 2011-10-08 12:32:26
|
Revision: 7511 http://skim-app.svn.sourceforge.net/skim-app/?rev=7511&view=rev Author: hofman Date: 2011-10-08 12:32:20 +0000 (Sat, 08 Oct 2011) Log Message: ----------- avoid autorelease Modified Paths: -------------- trunk/NSAttributedString_SKExtensions.m Modified: trunk/NSAttributedString_SKExtensions.m =================================================================== --- trunk/NSAttributedString_SKExtensions.m 2011-10-08 11:42:13 UTC (rev 7510) +++ trunk/NSAttributedString_SKExtensions.m 2011-10-08 12:32:20 UTC (rev 7511) @@ -94,9 +94,10 @@ - (void)setScriptingRTF:(id)data { if (data) { - NSAttributedString *attrString = [[[NSAttributedString alloc] initWithData:data options:[NSDictionary dictionary] documentAttributes:NULL error:NULL] autorelease]; + NSAttributedString *attrString = [[NSAttributedString alloc] initWithData:data options:[NSDictionary dictionary] documentAttributes:NULL error:NULL]; if (attrString) [self setAttributedString:attrString]; + [attrString release]; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hofman@us...> - 2011-10-08 11:42:20
|
Revision: 7510 http://skim-app.svn.sourceforge.net/skim-app/?rev=7510&view=rev Author: hofman Date: 2011-10-08 11:42:13 +0000 (Sat, 08 Oct 2011) Log Message: ----------- set whole attributed string of rich text from RTF, as the docs are wrong Modified Paths: -------------- trunk/NSAttributedString_SKExtensions.m Modified: trunk/NSAttributedString_SKExtensions.m =================================================================== --- trunk/NSAttributedString_SKExtensions.m 2011-10-07 13:10:33 UTC (rev 7509) +++ trunk/NSAttributedString_SKExtensions.m 2011-10-08 11:42:13 UTC (rev 7510) @@ -93,8 +93,11 @@ } - (void)setScriptingRTF:(id)data { - if (data) - [self readFromData:data options:[NSDictionary dictionary] documentAttributes:NULL error:NULL]; + if (data) { + NSAttributedString *attrString = [[[NSAttributedString alloc] initWithData:data options:[NSDictionary dictionary] documentAttributes:NULL error:NULL] autorelease]; + if (attrString) + [self setAttributedString:attrString]; + } } @end This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hofman@us...> - 2011-10-07 13:10:39
|
Revision: 7509 http://skim-app.svn.sourceforge.net/skim-app/?rev=7509&view=rev Author: hofman Date: 2011-10-07 13:10:33 +0000 (Fri, 07 Oct 2011) Log Message: ----------- use appkit extension to read RTF data Modified Paths: -------------- trunk/NSAttributedString_SKExtensions.m Modified: trunk/NSAttributedString_SKExtensions.m =================================================================== --- trunk/NSAttributedString_SKExtensions.m 2011-10-07 12:16:30 UTC (rev 7508) +++ trunk/NSAttributedString_SKExtensions.m 2011-10-07 13:10:33 UTC (rev 7509) @@ -93,12 +93,8 @@ } - (void)setScriptingRTF:(id)data { - if (data) { - NSAttributedString *attrString = [[NSAttributedString alloc] initWithData:data options:[NSDictionary dictionary] documentAttributes:NULL error:NULL]; - if (attrString) - [self setAttributedString:attrString]; - [attrString release]; - } + if (data) + [self readFromData:data options:[NSDictionary dictionary] documentAttributes:NULL error:NULL]; } @end This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hofman@us...> - 2011-10-07 12:16:37
|
Revision: 7508 http://skim-app.svn.sourceforge.net/skim-app/?rev=7508&view=rev Author: hofman Date: 2011-10-07 12:16:30 +0000 (Fri, 07 Oct 2011) Log Message: ----------- Redesign scripting support for stand-alone rich text. Use NSAttributedString for "rich text format" class and NSData for "RTF" value type. No need to for a separate class. Modified Paths: -------------- trunk/NSAttributedString_SKExtensions.h trunk/NSAttributedString_SKExtensions.m trunk/NSData_SKExtensions.h trunk/NSData_SKExtensions.m trunk/SKFormatCommand.m trunk/SKTextCommand.m trunk/Skim.sdef trunk/Skim.xcodeproj/project.pbxproj Removed Paths: ------------- trunk/SKRichTextFormat.h trunk/SKRichTextFormat.m Modified: trunk/NSAttributedString_SKExtensions.h =================================================================== --- trunk/NSAttributedString_SKExtensions.h 2011-10-05 11:34:01 UTC (rev 7507) +++ trunk/NSAttributedString_SKExtensions.h 2011-10-07 12:16:30 UTC (rev 7508) @@ -46,15 +46,23 @@ - (NSString *)xmlString; - (NSData *)RTFRepresentation; -+ (id)scriptingRtfWithDescriptor:(NSAppleEventDescriptor *)descriptor; -- (id)scriptingRtfDescriptor; +- (NSString *)scriptingName; +- (NSTextStorage *)scriptingRichText; +- (NSScriptObjectSpecifier *)objectSpecifier; +- (NSScriptObjectSpecifier *)richTextSpecifier; + @end @interface NSTextStorage (SKExtensions) - (id)scriptingRTF; -- (void)setScriptingRTF:(id)attrString; +- (void)setScriptingRTF:(id)data; @end + + +@interface NSApplication (SKRichTextFormat) +- (NSAttributedString *)valueInRichTextFormatWithName:(NSString *)name; +@end Modified: trunk/NSAttributedString_SKExtensions.m =================================================================== --- trunk/NSAttributedString_SKExtensions.m 2011-10-05 11:34:01 UTC (rev 7507) +++ trunk/NSAttributedString_SKExtensions.m 2011-10-07 12:16:30 UTC (rev 7508) @@ -38,6 +38,7 @@ #import "NSAttributedString_SKExtensions.h" #import "NSString_SKExtensions.h" +#import "NSData_SKExtensions.h" @implementation NSAttributedString (SKExtensions) @@ -62,20 +63,24 @@ #pragma mark Scripting support -+ (id)scriptingRtfWithDescriptor:(NSAppleEventDescriptor *)descriptor { - NSString *string = [descriptor stringValue]; - if (string) { - return [[[self alloc] initWithString:string] autorelease]; - } else { - NSError *error; - return [[[self alloc] initWithData:[descriptor data] options:[NSDictionary dictionary] documentAttributes:NULL error:&error] autorelease]; - } +- (NSString *)scriptingName { + return [[self RTFRepresentation] hexString]; } -- (id)scriptingRtfDescriptor { - return [NSAppleEventDescriptor descriptorWithDescriptorType:'RTF ' data:[self RTFRepresentation]]; +- (NSTextStorage *)scriptingRichText { + return [[[NSTextStorage alloc] initWithAttributedString:self] autorelease]; } +- (NSScriptObjectSpecifier *)objectSpecifier { + NSScriptClassDescription *containerClassDescription = [NSScriptClassDescription classDescriptionForClass:[NSApp class]]; + return [[[NSNameSpecifier allocWithZone:[self zone]] initWithContainerClassDescription:containerClassDescription containerSpecifier:nil key:@"richTextFormat" name:[self scriptingName]] autorelease]; +} + +- (NSScriptObjectSpecifier *)richTextSpecifier { + NSScriptObjectSpecifier *rtfSpecifier = [self objectSpecifier]; + return [[[NSPropertySpecifier alloc] initWithContainerClassDescription:[rtfSpecifier keyClassDescription] containerSpecifier:rtfSpecifier key:@"scriptingRichText"] autorelease]; +} + @end @@ -84,12 +89,26 @@ #pragma mark Scripting support - (id)scriptingRTF { - return self; + return [self RTFRepresentation]; } -- (void)setScriptingRTF:(id)attrString { - if (attrString) - [self setAttributedString:attrString]; +- (void)setScriptingRTF:(id)data { + if (data) { + NSAttributedString *attrString = [[NSAttributedString alloc] initWithData:data options:[NSDictionary dictionary] documentAttributes:NULL error:NULL]; + if (attrString) + [self setAttributedString:attrString]; + [attrString release]; + } } @end + + +@implementation NSApplication (SKRichTextFormat) + +- (NSAttributedString *)valueInRichTextFormatWithName:(NSString *)name { + NSData *data = [[[NSData alloc] initWithHexString:name] autorelease]; + return data ? [[[NSAttributedString alloc] initWithData:data options:[NSDictionary dictionary] documentAttributes:NULL error:NULL] autorelease] : nil; +} + +@end Modified: trunk/NSData_SKExtensions.h =================================================================== --- trunk/NSData_SKExtensions.h 2011-10-05 11:34:01 UTC (rev 7507) +++ trunk/NSData_SKExtensions.h 2011-10-07 12:16:30 UTC (rev 7508) @@ -69,6 +69,8 @@ - (id)scriptingPdfDescriptor; + (id)scriptingTiffPictureWithDescriptor:(NSAppleEventDescriptor *)descriptor; - (id)scriptingTiffPictureDescriptor; ++ (id)scriptingRtfWithDescriptor:(NSAppleEventDescriptor *)descriptor; +- (id)scriptingRtfDescriptor; @end Modified: trunk/NSData_SKExtensions.m =================================================================== --- trunk/NSData_SKExtensions.m 2011-10-05 11:34:01 UTC (rev 7507) +++ trunk/NSData_SKExtensions.m 2011-10-07 12:16:30 UTC (rev 7508) @@ -344,6 +344,14 @@ return [NSAppleEventDescriptor descriptorWithDescriptorType:'TIFF' data:self]; } ++ (id)scriptingRtfWithDescriptor:(NSAppleEventDescriptor *)descriptor { + return [descriptor data]; +} + +- (id)scriptingRtfDescriptor { + return [NSAppleEventDescriptor descriptorWithDescriptorType:'RTF ' data:self]; +} + + (void)load { // this should do nothing on Snow Leopard SKAddInstanceMethodImplementationFromSelector(self, @selector(rangeOfData:options:range:), @selector(Leopard_rangeOfData:options:range:)); Modified: trunk/SKFormatCommand.m =================================================================== --- trunk/SKFormatCommand.m 2011-10-05 11:34:01 UTC (rev 7507) +++ trunk/SKFormatCommand.m 2011-10-07 12:16:30 UTC (rev 7508) @@ -38,8 +38,8 @@ #import "SKFormatCommand.h" #import "SKTemplateParser.h" -#import "SKRichTextFormat.h" #import "SKTemplateManager.h" +#import "NSAttributedString_SKExtensions.h" @implementation SKFormatCommand @@ -74,16 +74,15 @@ } else if (attrString) { NSAttributedString *attrText = [SKTemplateParser attributedStringByParsingTemplateAttributedString:attrString usingObject:receiver]; if (attrText) { - NSMutableDictionary *mutableDocAttrs = [NSMutableDictionary dictionaryWithDictionary:docAttrs]; - [mutableDocAttrs setObject:NSRTFTextDocumentType forKey:NSDocumentTypeDocumentAttribute]; - NSData *data = [attrText RTFFromRange:NSMakeRange(0, [attrText length]) documentAttributes:mutableDocAttrs]; - text = [SKRichTextFormat richTextSpecifierWithData:data]; + text = [attrText richTextSpecifier]; if (file) { + NSMutableDictionary *mutableDocAttrs = [NSMutableDictionary dictionaryWithDictionary:docAttrs]; NSString *ext = [[[file path] pathExtension] lowercaseString]; if ([ext isEqualToString:@"rtfd"]) { [mutableDocAttrs setObject:NSRTFDTextDocumentType forKey:NSDocumentTypeDocumentAttribute]; [[text RTFDFileWrapperFromRange:NSMakeRange(0, [attrText length]) documentAttributes:mutableDocAttrs] writeToFile:[file path] atomically:YES updateFilenames:NO]; } else { + NSData *data = nil; NSString *docType = nil; if ([ext isEqualToString:@"rtf"]) docType = NSRTFTextDocumentType; @@ -95,7 +94,7 @@ docType = NSOpenDocumentTextDocumentType; else if ([ext isEqualToString:@"webarchive"]) docType = NSWebArchiveTextDocumentType; - if (docType && [docType isEqualToString:NSRTFTextDocumentType] == NO) { + if (docType) { [mutableDocAttrs setObject:docType forKey:NSDocumentTypeDocumentAttribute]; data = [attrText dataFromRange:NSMakeRange(0, [attrText length]) documentAttributes:mutableDocAttrs error:NULL]; } Deleted: trunk/SKRichTextFormat.h =================================================================== --- trunk/SKRichTextFormat.h 2011-10-05 11:34:01 UTC (rev 7507) +++ trunk/SKRichTextFormat.h 2011-10-07 12:16:30 UTC (rev 7508) @@ -1,59 +0,0 @@ -// -// SKRichTextFormat.h -// Skim -// -// Created by Christiaan Hofman on 1/19/09. -/* - This software is Copyright (c) 2009-2011 - Christiaan Hofman. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - - Neither the name of Christiaan Hofman nor the names of any - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#import <Cocoa/Cocoa.h> - - -@... SKRichTextFormat : NSObject { - NSData *data; -} - -+ (id)richTextSpecifierWithData:(NSData *)aData; - -- (id)initWithData:(NSData *)aData; -- (id)initWithName:(NSString *)aName; - -@... (nonatomic, readonly) NSString *name; -@... (nonatomic, readonly) NSTextStorage *richText; - -@... - - -@... NSApplication (SKRichTextFormat) -- (SKRichTextFormat *)valueInRichTextFormatWithName:(NSString *)name; -@... Deleted: trunk/SKRichTextFormat.m =================================================================== --- trunk/SKRichTextFormat.m 2011-10-05 11:34:01 UTC (rev 7507) +++ trunk/SKRichTextFormat.m 2011-10-07 12:16:30 UTC (rev 7508) @@ -1,103 +0,0 @@ -// -// SKRichTextFormat.m -// Skim -// -// Created by Christiaan Hofman on 1/19/09. -/* - This software is Copyright (c) 2009-2011 - Christiaan Hofman. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - - Neither the name of Christiaan Hofman nor the names of any - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#import "SKRichTextFormat.h" -#import "NSData_SKExtensions.h" - - -@... SKRichTextFormat - -@... name, richText; - -+ (id)richTextSpecifierWithData:(NSData *)aData { - SKRichTextFormat *rtf = [[self alloc] initWithData:aData]; - NSScriptObjectSpecifier *rtfSpecifier = [rtf objectSpecifier]; - NSPropertySpecifier *richTextSpecifier = rtfSpecifier ? [[[NSPropertySpecifier alloc] initWithContainerClassDescription:[rtfSpecifier keyClassDescription] containerSpecifier:rtfSpecifier key:@"richText"] autorelease] : nil; - [rtf release]; - return richTextSpecifier; -} - -- (id)initWithData:(NSData *)aData { - self = [super init]; - if (self) { - if (aData) { - data = [aData retain]; - } else { - [self release]; - self = nil; - } - } - return self; -} - -- (id)initWithName:(NSString *)aName { - NSData *aData = [[NSData alloc] initWithHexString:aName]; - self = [self initWithData:aData]; - [aData release]; - return self; -} - -- (void)dealloc { - SKDESTROY(data); - [super dealloc]; -} - -- (NSScriptObjectSpecifier *)objectSpecifier { - NSScriptClassDescription *containerClassDescription = [NSScriptClassDescription classDescriptionForClass:[NSApp class]]; - return [[[NSNameSpecifier allocWithZone:[self zone]] initWithContainerClassDescription:containerClassDescription containerSpecifier:nil key:@"richTextFormat" name:[self name]] autorelease]; -} - -- (NSString *)name { - return [data hexString]; -} - -- (NSTextStorage *)richText { - NSError *error; - return [[[NSTextStorage alloc] initWithData:data options:[NSDictionary dictionary] documentAttributes:NULL error:&error] autorelease]; -} - -@... - - -@... NSApplication (SKRichTextFormat) - -- (SKRichTextFormat *)valueInRichTextFormatWithName:(NSString *)name { - return [[[SKRichTextFormat alloc] initWithName:name] autorelease]; -} - -@... Modified: trunk/SKTextCommand.m =================================================================== --- trunk/SKTextCommand.m 2011-10-05 11:34:01 UTC (rev 7507) +++ trunk/SKTextCommand.m 2011-10-07 12:16:30 UTC (rev 7508) @@ -42,7 +42,6 @@ #import "PDFAnnotation_SKExtensions.h" #import "PDFSelection_SKExtensions.h" #import "NSAttributedString_SKExtensions.h" -#import "SKRichTextFormat.h" @implementation SKTextCommand @@ -64,13 +63,13 @@ } else if ([dPO isKindOfClass:[PDFAnnotation class]]) { if (page == nil || [page isEqual:[dPO page]]) attributedString = [dPO textContents]; - } else if ([dP isKindOfClass:[NSAttributedString class]]) { - attributedString = dP; + } else if ([dP isKindOfClass:[NSData class]]) { + attributedString = [[[NSAttributedString alloc] initWithData:dP options:[NSDictionary dictionary] documentAttributes:NULL error:NULL] autorelease]; } else { attributedString = [[PDFSelection selectionWithSpecifier:dP onPage:page] attributedString]; } - return [SKRichTextFormat richTextSpecifierWithData:[attributedString RTFRepresentation]]; + return [attributedString richTextSpecifier]; } @end Modified: trunk/Skim.sdef =================================================================== --- trunk/Skim.sdef 2011-10-05 11:34:01 UTC (rev 7507) +++ trunk/Skim.sdef 2011-10-07 12:16:30 UTC (rev 7508) @@ -277,7 +277,7 @@ </value-type> <value-type name="RTF" code="RTF "> - <cocoa class="NSAttributedString"/> + <cocoa class="NSData"/> </value-type> <class name="rich text" plural="rich text" code="ricT" @@ -519,14 +519,14 @@ <class name="rich text format" plural="rich text formats" code="RTFt" hidden="yes" description="Rich text format, encoding rich text."> - <cocoa class="SKRichTextFormat"/> + <cocoa class="NSAttributedString"/> <property name="name" code="pnam" type="text" access="r" description="The name for the rich text format."> - <cocoa key="name"/> + <cocoa key="scriptingName"/> </property> <contents name="rich text" code="ricT" type="rich text" access="r" description="The rich text representation of the rich text format."> - <cocoa key="richText"/> + <cocoa key="scriptingRichText"/> </contents> </class> Modified: trunk/Skim.xcodeproj/project.pbxproj =================================================================== --- trunk/Skim.xcodeproj/project.pbxproj 2011-10-05 11:34:01 UTC (rev 7507) +++ trunk/Skim.xcodeproj/project.pbxproj 2011-10-07 12:16:30 UTC (rev 7508) @@ -219,7 +219,6 @@ CEB735A20C4A8CD6000350F9 /* TransitionShading.tiff in Resources */ = {isa = PBXBuildFile; fileRef = CEB735A10C4A8CD6000350F9 /* TransitionShading.tiff */; }; CEBD52ED0C9C0AE500FBF6A4 /* SKBookmark.m in Sources */ = {isa = PBXBuildFile; fileRef = CEBD52EB0C9C0AE500FBF6A4 /* SKBookmark.m */; }; CEBF85E20CCE2DE70057A050 /* NSAffineTransform_SKExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = CEBF85E00CCE2DE70057A050 /* NSAffineTransform_SKExtensions.m */; }; - CEC3154F0F24AC02008D2C75 /* SKRichTextFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = CEC3154E0F24AC02008D2C75 /* SKRichTextFormat.m */; }; CEC3AD240E23EC0300F40B0B /* PDFAnnotationLink_SKExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = CEC3AD230E23EC0300F40B0B /* PDFAnnotationLink_SKExtensions.m */; }; CECB03D30DC7503A0000B16B /* SKGroupedSearchResult.m in Sources */ = {isa = PBXBuildFile; fileRef = CECB03D20DC7503A0000B16B /* SKGroupedSearchResult.m */; }; CECDC4FF0C5966A80026AAEC /* NSImage_SKExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = CECDC4FD0C5966A80026AAEC /* NSImage_SKExtensions.m */; }; @@ -906,8 +905,6 @@ CEBD52EB0C9C0AE500FBF6A4 /* SKBookmark.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SKBookmark.m; sourceTree = "<group>"; }; CEBF85DF0CCE2DE70057A050 /* NSAffineTransform_SKExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSAffineTransform_SKExtensions.h; sourceTree = "<group>"; }; CEBF85E00CCE2DE70057A050 /* NSAffineTransform_SKExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSAffineTransform_SKExtensions.m; sourceTree = "<group>"; }; - CEC3154D0F24AC02008D2C75 /* SKRichTextFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SKRichTextFormat.h; sourceTree = "<group>"; }; - CEC3154E0F24AC02008D2C75 /* SKRichTextFormat.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SKRichTextFormat.m; sourceTree = "<group>"; }; CEC3AD220E23EC0300F40B0B /* PDFAnnotationLink_SKExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PDFAnnotationLink_SKExtensions.h; sourceTree = "<group>"; }; CEC3AD230E23EC0300F40B0B /* PDFAnnotationLink_SKExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PDFAnnotationLink_SKExtensions.m; sourceTree = "<group>"; }; CEC4C33F0CA90CA200299397 /* Spanish */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = Spanish; path = Spanish.lproj/Credits.rtf; sourceTree = "<group>"; }; @@ -1691,8 +1688,6 @@ CE3366DE0E28BCFA005F99E6 /* SKPDFSyncRecord.m */, CE4294A10BBD29120016FDC2 /* SKReadingBar.h */, CE4294A20BBD29120016FDC2 /* SKReadingBar.m */, - CEC3154D0F24AC02008D2C75 /* SKRichTextFormat.h */, - CEC3154E0F24AC02008D2C75 /* SKRichTextFormat.m */, CE2DE4900B85D48F00D0DA12 /* SKThumbnail.h */, CE2DE4910B85D48F00D0DA12 /* SKThumbnail.m */, CE8978CB0CBFC70B00EA2D98 /* SKTemplateTag.h */, @@ -2507,7 +2502,6 @@ CEE0F5EB0EBB3DEC000A7A8C /* SKLevelIndicatorCell.m in Sources */, CE0A3C8E0EBF3AAA00526C74 /* NSResponder_SKExtensions.m in Sources */, CE17F47E0F1A17E200E741DD /* SKPDFSynchronizerServer.m in Sources */, - CEC3154F0F24AC02008D2C75 /* SKRichTextFormat.m in Sources */, CE32531F0F4723EA0021BADD /* SKMainWindowController_Actions.m in Sources */, CE80A81E0FDAB1690086A46C /* SKHighlightingPopUpButton.m in Sources */, CE9B804A1030642400EA8774 /* SKTransitionInfo.m in Sources */, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hofman@us...> - 2011-10-05 11:34:07
|
Revision: 7507 http://skim-app.svn.sourceforge.net/skim-app/?rev=7507&view=rev Author: hofman Date: 2011-10-05 11:34:01 +0000 (Wed, 05 Oct 2011) Log Message: ----------- avoid referring to explicit application class in object specifiers Modified Paths: -------------- trunk/SKLine.m trunk/SKRichTextFormat.m Modified: trunk/SKLine.m =================================================================== --- trunk/SKLine.m 2011-10-02 22:49:50 UTC (rev 7506) +++ trunk/SKLine.m 2011-10-05 11:34:01 UTC (rev 7507) @@ -37,7 +37,6 @@ */ #import "SKLine.h" -#import "SKApplication.h" @implementation SKLine @@ -54,7 +53,7 @@ } - (NSScriptObjectSpecifier *)objectSpecifier { - NSScriptClassDescription *containerClassDescription = [NSScriptClassDescription classDescriptionForClass:[SKApplication class]]; + NSScriptClassDescription *containerClassDescription = [NSScriptClassDescription classDescriptionForClass:[NSApp class]]; return [[[NSIndexSpecifier allocWithZone:[self zone]] initWithContainerClassDescription:containerClassDescription containerSpecifier:nil key:@"lines" index:index] autorelease]; } Modified: trunk/SKRichTextFormat.m =================================================================== --- trunk/SKRichTextFormat.m 2011-10-02 22:49:50 UTC (rev 7506) +++ trunk/SKRichTextFormat.m 2011-10-05 11:34:01 UTC (rev 7507) @@ -38,7 +38,6 @@ #import "SKRichTextFormat.h" #import "NSData_SKExtensions.h" -#import "SKApplication.h" @implementation SKRichTextFormat @@ -79,7 +78,7 @@ } - (NSScriptObjectSpecifier *)objectSpecifier { - NSScriptClassDescription *containerClassDescription = [NSScriptClassDescription classDescriptionForClass:[SKApplication class]]; + NSScriptClassDescription *containerClassDescription = [NSScriptClassDescription classDescriptionForClass:[NSApp class]]; return [[[NSNameSpecifier allocWithZone:[self zone]] initWithContainerClassDescription:containerClassDescription containerSpecifier:nil key:@"richTextFormat" name:[self name]] autorelease]; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hofman@us...> - 2011-10-02 22:49:56
|
Revision: 7506 http://skim-app.svn.sourceforge.net/skim-app/?rev=7506&view=rev Author: hofman Date: 2011-10-02 22:49:50 +0000 (Sun, 02 Oct 2011) Log Message: ----------- fix applescript code for type of bookmark Modified Paths: -------------- trunk/Skim.sdef Modified: trunk/Skim.sdef =================================================================== --- trunk/Skim.sdef 2011-10-02 11:42:02 UTC (rev 7505) +++ trunk/Skim.sdef 2011-10-02 22:49:50 UTC (rev 7506) @@ -1189,7 +1189,7 @@ description="The name for the bookmark."> <cocoa key="label"/> </property> - <property name="type" code="rtyp" type="bookmark type" access="r" + <property name="type" code="NTyp" type="bookmark type" access="r" description="The bookmark type."> <cocoa key="bookmarkType"/> </property> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hofman@us...> - 2011-10-02 11:42:09
|
Revision: 7505 http://skim-app.svn.sourceforge.net/skim-app/?rev=7505&view=rev Author: hofman Date: 2011-10-02 11:42:02 +0000 (Sun, 02 Oct 2011) Log Message: ----------- local variable in diskimage script for distribution name Modified Paths: -------------- trunk/Skim.xcodeproj/project.pbxproj Modified: trunk/Skim.xcodeproj/project.pbxproj =================================================================== --- trunk/Skim.xcodeproj/project.pbxproj 2011-10-02 08:59:17 UTC (rev 7504) +++ trunk/Skim.xcodeproj/project.pbxproj 2011-10-02 11:42:02 UTC (rev 7505) @@ -2292,7 +2292,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/bash; - shellScript = "# app name, also image name\nNAME=Skim\n\n# app bundle to copy\nSRC_BUNDLE=\"${BUILT_PRODUCTS_DIR}/${NAME}.app\"\n\n# template image in source folder\nSRC_IMAGE=\"${SOURCE_ROOT}/${NAME}.dmg\"\n\n# temporary image\nDST_IMAGE=\"/tmp/${NAME}.dmg\"\n\n# temporary volume\nDST_VOLUME=\"/Volumes/${NAME}\"\n\n# version\nVERSION=$(/usr/bin/defaults read \"${SRC_BUNDLE}/Contents/Info\" CFBundleShortVersionString)\n\n# final distribution image\nFINAL_IMAGE=\"${HOME}/Desktop/${NAME}-${VERSION}.dmg\"\n\n# see if this file already exists and bail\nif [ -f \"${FINAL_IMAGE}\" ]; then\n\techo \"error: ${FINAL_IMAGE} exists\"\n\texit 1\nfi\n\n# see if a volume is already mounted or a\n# previous cp operation was botched\nif [ -e \"${DST_VOLUME}\" ]; then\n\techo \"error: ${DST_VOLUME} exists\"\n\techo \"warning: opening ${DST_VOLUME} in Finder\"\n\t/usr/bin/open ${DST_VOLUME}\n\texit 1\nfi\n\n# remove temp image from a previous run\nif [ -f \"${DST_IMAGE}\" ]; then\n\techo \"warning: removing ${DST_IMAGE}\"\n\t/bin/rm \"${DST_IMAGE}\"\n\tif [ $? != 0 ]; then\n\t\techo \"error: failed to remove ${DST_IMAGE}\"\n\t\texit 1\n\tfi\nfi\n\n# stored zipped in svn, so unzip if needed\n# pass o to overwrite, or unzip waits for stdin\n# when trying to unpack the resource fork/EA\n\nif [ ! -f \"${SRC_IMAGE}\" ]; then\n\techo \"Unzipping disk image ${SRC_IMAGE}.zip\"\n\t/usr/bin/unzip -uo \"${SRC_IMAGE}.zip\"\n\tif [ $? != 0 ]; then\n\t\techo \"error: failed to unzip ${SRC_IMAGE}.zip\"\n\t\texit 1\n\tfi\nfi\n\n# copy empty image to /tmp\necho \"Copying disk image ${SRC_IMAGE} to ${DST_IMAGE}\"\n/bin/cp \"${SRC_IMAGE}\" \"${DST_IMAGE}\"\nif [ $? != 0 ]; then\n\techo \"error: failed to copy ${SRC_IMAGE} to ${DST_IMAGE}\"\n\texit 1\nfi\n\n# mount image\necho \"Mounting disk image ${DST_IMAGE}\"\n/usr/bin/hdiutil attach -nobrowse -noautoopen \"${DST_IMAGE}\"\nif [ $? != 0 ]; then\n\techo \"error: failed to mount ${DST_IMAGE}\"\n\texit 1\nfi\n\n# use CpMac to copy all files\necho \"Copying build product from ${SRC_BUNDLE} to ${DST_VOLUME}\"\n${SYSTEM_DEVELOPER_TOOLS}/CpMac -r \"${SRC_BUNDLE}\" \"${DST_VOLUME}\"\nif [ $? != 0 ]; then\n\techo \"error: failed to copy ${SRC_BUNDLE}\"\n\texit 1\nfi\n\n# tell finder to set the icon position\necho \"Moving build product in disk image\"\n/usr/bin/osascript -e \"tell application \\\"Finder\\\" to set the position of application file \\\"${NAME}.app\\\" of disk named \\\"${NAME}\\\" to {90, 206}\"\nif [ $? != 0 ]; then\n\techo \"error: Finder failed to set position\"\n\texit 1\nfi\n\n# data is copied, so unmount the volume, we may need to wait when the volume is in use\necho \"Ejecting disk image ${DST_VOLUME}\"\nN_TRIES=0\n/usr/sbin/diskutil eject \"${DST_VOLUME}\"\nwhile [ $? != 0 ]; do\n\tif [ $((++N_TRIES)) -gt 12 ]; then\n\t\techo \"error: failed to eject ${DST_VOLUME}\"\n\t\texit 1\n\telse\n\t\tsleep 5\n\t\t/usr/sbin/diskutil eject \"${DST_VOLUME}\"\n\tfi\ndone\n\n# resize image to fit\necho \"Resizing disk image ${DST_IMAGE}\"\n/usr/bin/hdiutil resize -size $(/usr/bin/hdiutil resize \"${DST_IMAGE}\" | cut -f -1 -)b \"${DST_IMAGE}\"\nif [ $? != 0 ]; then\n\techo \"error: failed to resize ${DST_IMAGE}\"\n\texit 1\nfi\n\n# convert image to read only and compress\necho \"Converting disk image ${DST_IMAGE} to read only disk image at ${FINAL_IMAGE}\"\n/usr/bin/hdiutil convert \"${DST_IMAGE}\" -format UDZO -imagekey zlib-level=9 -o \"${FINAL_IMAGE}\"\nif [ $? != 0 ]; then\n\techo \"error: failed to convert ${DST_IMAGE}\"\n\texit 1\nfi\n\n# set internet-enable bit for Safari, even\n# though I dislike internet-enabled images...\necho \"Internet-enable disk image ${FINAL_IMAGE}\"\n/usr/bin/hdiutil internet-enable -YES \"${FINAL_IMAGE}\"\nif [ $? != 0 ]; then\n\techo \"error: failed to internet-enable ${DST_IMAGE}\"\n\texit 1\nfi\n\n# remove temp image and source image\necho \"Removing temporary disk images ${DST_IMAGE} and ${SRC_IMAGE}\"\n/bin/rm -f \"${DST_IMAGE}\" \"${SRC_IMAGE}\"\nif [ $? != 0 ]; then\n\techo \"warning: failed to remove ${DST_IMAGE} or ${SRC_IMAGE}\"\nfi\n\n# create the Sparkle appcast\n# see http://www.entropy.ch/blog/Developer/2008/09/22/Sparkle-Appcast-Automation-in-Xcode.html\n\necho \"Creating appcast for Sparkle...\"\n\nDATE=$(/bin/date +\"%a, %d %b %Y %T %z\")\nSIZE=$(/usr/bin/stat -f %z \"${FINAL_IMAGE}\")\nVERSION_NUMBER=$(/usr/bin/defaults read \"${SRC_BUNDLE}/Contents/Info\" CFBundleVersion)\nURL=\"http://sourceforge.net/projects/skim-app/files/${NAME}/${NAME}-${VERSION}/${NAME}-${VERSION}.dmg/download\"\nAPPCAST=\"${HOME}/Desktop/${NAME}-${VERSION}.xml\"\nKEY_NAME=\"${NAME} Sparkle Key\"\nSIGNATURE=$(/usr/bin/openssl dgst -sha1 -binary < \"${FINAL_IMAGE}\" | /usr/bin/openssl dgst -dss1 -sign <(security find-generic-password -g -s \"${KEY_NAME}\" 2>&1 1>/dev/null | perl -pe '($_) = /\"(.+)\"/; s/\\\\012/\\n/g') | /usr/bin/openssl enc -base64)\nif [ $? != 0 ]; then\n\techo \"warning: failed to generate signature. You need the private key in a secure note named \\\"${KEY_NAME}\\\"\" >&2\nfi\n\n/bin/cat > \"${APPCAST}\" << EOF\n<?xml version=\"1.0\" encoding=\"utf-8\"?> \n<rss version=\"2.0\" xmlns:sparkle=\"http://www.andymatuschak.org/xml-namespaces/sparkle\"; xmlns:dc=\"http://purl.org/dc/elements/1.1/\">\n <channel> \n <title>${NAME} Changelog</title>\n <link>http://skim-app.sourceforge.net</link>\n <description>PDF reader and note-taker</description>\n <item>\n <title>Version ${VERSION}</title>\n <description><![CDATA[\n<h1>Version ${VERSION}</h1>\n\n<h2>New Features</h2>\n<ul>\n<li></li>\n</ul>\n\n<h2>Bugs Fixed</h2>\n<ul>\n<li></li>\n</ul>\n\t\t\t]]></description>\n <pubDate>${DATE}</pubDate>\n <sparkle:minimumSystemVersion>10.5.0</sparkle:minimumSystemVersion>\n <enclosure sparkle:version=\"${VERSION_NUMBER}\" sparkle:shortVersionString=\"${VERSION}\" url=\"${URL}\" sparkle:dsaSignature=\"${SIGNATURE}\" length=\"${SIZE}\" type=\"application/x-apple-diskimage\"/>\n </item>\n\n </channel>\n</rss>\nEOF\n\nexit 0\n"; + shellScript = "# app name, also image name\nNAME=Skim\n\n# app bundle to copy\nSRC_BUNDLE=\"${BUILT_PRODUCTS_DIR}/${NAME}.app\"\n\n# template image in source folder\nSRC_IMAGE=\"${SOURCE_ROOT}/${NAME}.dmg\"\n\n# temporary image\nDST_IMAGE=\"/tmp/${NAME}.dmg\"\n\n# temporary volume\nDST_VOLUME=\"/Volumes/${NAME}\"\n\n# version\nVERSION=$(/usr/bin/defaults read \"${SRC_BUNDLE}/Contents/Info\" CFBundleShortVersionString)\n\n# distribution name\nDIST_NAME=\"${NAME}-${VERSION}\"\n\n# final distribution image\nFINAL_IMAGE=\"${HOME}/Desktop/${DIST_NAME}.dmg\"\n\n# see if this file already exists and bail\nif [ -f \"${FINAL_IMAGE}\" ]; then\n\techo \"error: ${FINAL_IMAGE} exists\"\n\texit 1\nfi\n\n# see if a volume is already mounted or a\n# previous cp operation was botched\nif [ -e \"${DST_VOLUME}\" ]; then\n\techo \"error: ${DST_VOLUME} exists\"\n\techo \"warning: opening ${DST_VOLUME} in Finder\"\n\t/usr/bin/open ${DST_VOLUME}\n\texit 1\nfi\n\n# remove temp image from a previous run\nif [ -f \"${DST_IMAGE}\" ]; then\n\techo \"warning: removing ${DST_IMAGE}\"\n\t/bin/rm \"${DST_IMAGE}\"\n\tif [ $? != 0 ]; then\n\t\techo \"error: failed to remove ${DST_IMAGE}\"\n\t\texit 1\n\tfi\nfi\n\n# stored zipped in svn, so unzip if needed\n# pass o to overwrite, or unzip waits for stdin\n# when trying to unpack the resource fork/EA\n\nif [ ! -f \"${SRC_IMAGE}\" ]; then\n\techo \"Unzipping disk image ${SRC_IMAGE}.zip\"\n\t/usr/bin/unzip -uo \"${SRC_IMAGE}.zip\"\n\tif [ $? != 0 ]; then\n\t\techo \"error: failed to unzip ${SRC_IMAGE}.zip\"\n\t\texit 1\n\tfi\nfi\n\n# copy empty image to /tmp\necho \"Copying disk image ${SRC_IMAGE} to ${DST_IMAGE}\"\n/bin/cp \"${SRC_IMAGE}\" \"${DST_IMAGE}\"\nif [ $? != 0 ]; then\n\techo \"error: failed to copy ${SRC_IMAGE} to ${DST_IMAGE}\"\n\texit 1\nfi\n\n# mount image\necho \"Mounting disk image ${DST_IMAGE}\"\n/usr/bin/hdiutil attach -nobrowse -noautoopen \"${DST_IMAGE}\"\nif [ $? != 0 ]; then\n\techo \"error: failed to mount ${DST_IMAGE}\"\n\texit 1\nfi\n\n# use CpMac to copy all files\necho \"Copying build product from ${SRC_BUNDLE} to ${DST_VOLUME}\"\n${SYSTEM_DEVELOPER_TOOLS}/CpMac -r \"${SRC_BUNDLE}\" \"${DST_VOLUME}\"\nif [ $? != 0 ]; then\n\techo \"error: failed to copy ${SRC_BUNDLE}\"\n\texit 1\nfi\n\n# tell finder to set the icon position\necho \"Moving build product in disk image\"\n/usr/bin/osascript -e \"tell application \\\"Finder\\\" to set the position of application file \\\"${NAME}.app\\\" of disk named \\\"${NAME}\\\" to {90, 206}\"\nif [ $? != 0 ]; then\n\techo \"error: Finder failed to set position\"\n\texit 1\nfi\n\n# data is copied, so unmount the volume, we may need to wait when the volume is in use\necho \"Ejecting disk image ${DST_VOLUME}\"\nN_TRIES=0\n/usr/sbin/diskutil eject \"${DST_VOLUME}\"\nwhile [ $? != 0 ]; do\n\tif [ $((++N_TRIES)) -gt 12 ]; then\n\t\techo \"error: failed to eject ${DST_VOLUME}\"\n\t\texit 1\n\telse\n\t\tsleep 5\n\t\t/usr/sbin/diskutil eject \"${DST_VOLUME}\"\n\tfi\ndone\n\n# resize image to fit\necho \"Resizing disk image ${DST_IMAGE}\"\n/usr/bin/hdiutil resize -size $(/usr/bin/hdiutil resize \"${DST_IMAGE}\" | cut -f -1 -)b \"${DST_IMAGE}\"\nif [ $? != 0 ]; then\n\techo \"error: failed to resize ${DST_IMAGE}\"\n\texit 1\nfi\n\n# convert image to read only and compress\necho \"Converting disk image ${DST_IMAGE} to read only disk image at ${FINAL_IMAGE}\"\n/usr/bin/hdiutil convert \"${DST_IMAGE}\" -format UDZO -imagekey zlib-level=9 -o \"${FINAL_IMAGE}\"\nif [ $? != 0 ]; then\n\techo \"error: failed to convert ${DST_IMAGE}\"\n\texit 1\nfi\n\n# set internet-enable bit for Safari, even\n# though I dislike internet-enabled images...\necho \"Internet-enable disk image ${FINAL_IMAGE}\"\n/usr/bin/hdiutil internet-enable -YES \"${FINAL_IMAGE}\"\nif [ $? != 0 ]; then\n\techo \"error: failed to internet-enable ${DST_IMAGE}\"\n\texit 1\nfi\n\n# remove temp image and source image\necho \"Removing temporary disk images ${DST_IMAGE} and ${SRC_IMAGE}\"\n/bin/rm -f \"${DST_IMAGE}\" \"${SRC_IMAGE}\"\nif [ $? != 0 ]; then\n\techo \"warning: failed to remove ${DST_IMAGE} or ${SRC_IMAGE}\"\nfi\n\n# create the Sparkle appcast\n# see http://www.entropy.ch/blog/Developer/2008/09/22/Sparkle-Appcast-Automation-in-Xcode.html\n\necho \"Creating appcast for Sparkle...\"\n\nDATE=$(/bin/date +\"%a, %d %b %Y %T %z\")\nSIZE=$(/usr/bin/stat -f %z \"${FINAL_IMAGE}\")\nVERSION_NUMBER=$(/usr/bin/defaults read \"${SRC_BUNDLE}/Contents/Info\" CFBundleVersion)\nURL=\"http://sourceforge.net/projects/skim-app/files/${NAME}/${DIST_NAME}/${DIST_NAME}.dmg/download\"\nAPPCAST=\"${HOME}/Desktop/${DIST_NAME}.xml\"\nKEY_NAME=\"${NAME} Sparkle Key\"\nSIGNATURE=$(/usr/bin/openssl dgst -sha1 -binary < \"${FINAL_IMAGE}\" | /usr/bin/openssl dgst -dss1 -sign <(security find-generic-password -g -s \"${KEY_NAME}\" 2>&1 1>/dev/null | perl -pe '($_) = /\"(.+)\"/; s/\\\\012/\\n/g') | /usr/bin/openssl enc -base64)\nif [ $? != 0 ]; then\n\techo \"warning: failed to generate signature. You need the private key in a secure note named \\\"${KEY_NAME}\\\"\" >&2\nfi\n\n/bin/cat > \"${APPCAST}\" << EOF\n<?xml version=\"1.0\" encoding=\"utf-8\"?> \n<rss version=\"2.0\" xmlns:sparkle=\"http://www.andymatuschak.org/xml-namespaces/sparkle\"; xmlns:dc=\"http://purl.org/dc/elements/1.1/\">\n <channel> \n <title>${NAME} Changelog</title>\n <link>http://skim-app.sourceforge.net</link>\n <description>PDF reader and note-taker</description>\n <item>\n <title>Version ${VERSION}</title>\n <description><![CDATA[\n<h1>Version ${VERSION}</h1>\n\n<h2>New Features</h2>\n<ul>\n<li></li>\n</ul>\n\n<h2>Bugs Fixed</h2>\n<ul>\n<li></li>\n</ul>\n\t\t\t]]></description>\n <pubDate>${DATE}</pubDate>\n <sparkle:minimumSystemVersion>10.5.0</sparkle:minimumSystemVersion>\n <enclosure sparkle:version=\"${VERSION_NUMBER}\" sparkle:shortVersionString=\"${VERSION}\" url=\"${URL}\" sparkle:dsaSignature=\"${SIGNATURE}\" length=\"${SIZE}\" type=\"application/x-apple-diskimage\"/>\n </item>\n\n </channel>\n</rss>\nEOF\n\nexit 0\n"; }; CEE1383C0BCEA63F00BF2D3E /* Run Script: Genstrings */ = { isa = PBXShellScriptBuildPhase; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |