Changeset 333

Show
Ignore:
Timestamp:
09/27/08 18:36:08 (3 months ago)
Author:
wolf
Message:

[NEW] MarkdownLive? 1.4: Now autosaves and uses discount as its markdown->html engine.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/cocoa/MarkdownLive/Info.plist

    r316 r333  
    4141        <string>????</string> 
    4242        <key>CFBundleVersion</key> 
    43         <string>1.3</string> 
     43        <string>1.4</string> 
    4444        <key>CFBundleShortVersionString</key> 
    45         <string>1.3</string> 
     45        <string>1.4</string> 
    4646        <key>NSMainNibFile</key> 
    4747        <string>MainMenu</string> 
    4848        <key>NSPrincipalClass</key> 
    4949        <string>NSApplication</string> 
     50        <key>JRLogLevel.DDTemporaryDirectory</key> 
     51        <string>INFO</string> 
    5052</dict> 
    5153</plist> 
  • trunk/cocoa/MarkdownLive/MarkdownLive Release Notes.markdown

    r108 r333  
    1 # MarkdownLive-0 Sun May 21 2006 
     1# MarkdownLive 1.4 Sun May 21 2008 
     2 
     3* Switch to discount for markdown engine. Saves having to spawn a Perl/ruby instance all the time. maruku also had rendering quirks, including not rendering things like `C4[2]` correctly, forcing me to write `C4\[2\]`. 
     4 
     5        But discount has a really strange source layout, to the point where I need to separate write wrappers for a couple of functions because you can't #include multiple header files since their typedefs conflict (`Document`). discount also defines `Line`, in conflict with QuickDraw, so I do preprocessor hackery to work-around that as well (<http://lists.apple.com/archives/Xcode-users/2008/Sep/msg00537.html>). 
     6 
     7* MarkdownLive now autosaves. 
     8 
     9--- 
     10 
     11# MarkdownLive 1.3 Jul 31 2008 
     12 
     13* Now uses [maruku](http://maruku.rubyforge.org) for its engine to get things like "Markdown inside HTML elements" and definition lists. 
     14 
     15--- 
     16 
     17# MarkdownLive-0 May 21 2006 
    218 
    319* Supplies a category on `NSTask` (`+runScriptNamed:extension:input:error:`) that handles running external scripts. Marshals `NSString` parameters into `STDIN`/`STDOUT` pipe read/writes. 
  • trunk/cocoa/MarkdownLive/MarkdownLive.xcodeproj/project.pbxproj

    r330 r333  
    88 
    99/* Begin PBXBuildFile section */ 
    10                 79252F250E8DF46200DFAD98 /* discountInclude.c in Sources */ = {isa = PBXBuildFile; fileRef = 79252F240E8DF46200DFAD98 /* discountInclude.c */; }; 
    11                 79252F560E8DFAF200DFAD98 /* DDTemporaryFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 79252F520E8DFAF200DFAD98 /* DDTemporaryFile.m */; }; 
    12                 79252F570E8DFAF200DFAD98 /* DDTemporaryDirectory.m in Sources */ = {isa = PBXBuildFile; fileRef = 79252F540E8DFAF200DFAD98 /* DDTemporaryDirectory.m */; }; 
    13                 79252F5F0E8E017E00DFAD98 /* JRLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 79252F5D0E8E017E00DFAD98 /* JRLog.m */; }; 
    1410                79252FF20E8E080100DFAD98 /* generate.c in Sources */ = {isa = PBXBuildFile; fileRef = 79252FF10E8E080100DFAD98 /* generate.c */; }; 
     11                792530F00E8F40F200DFAD98 /* discountWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 792530EF0E8F40F200DFAD98 /* discountWrapper.m */; }; 
     12                792530FB0E8F49CE00DFAD98 /* mkdio.c in Sources */ = {isa = PBXBuildFile; fileRef = 792530FA0E8F49CE00DFAD98 /* mkdio.c */; }; 
     13                792530FF0E8F49E800DFAD98 /* markdown.c in Sources */ = {isa = PBXBuildFile; fileRef = 792530FE0E8F49E800DFAD98 /* markdown.c */; }; 
     14                792531010E8F4A0900DFAD98 /* resource.c in Sources */ = {isa = PBXBuildFile; fileRef = 792531000E8F4A0900DFAD98 /* resource.c */; }; 
     15                792531470E8F4CD800DFAD98 /* mkdioWrapper.c in Sources */ = {isa = PBXBuildFile; fileRef = 792531460E8F4CD800DFAD98 /* mkdioWrapper.c */; }; 
     16                7925314B0E8F4E4D00DFAD98 /* markdownWrapper.c in Sources */ = {isa = PBXBuildFile; fileRef = 7925314A0E8F4E4D00DFAD98 /* markdownWrapper.c */; }; 
    1517                796A2AD80A20DCEE00440275 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 796A2AD70A20DCEE00440275 /* WebKit.framework */; }; 
    1618                79F7EF740AC39638003DAB4E /* MarkdownLiveApp.icns in Resources */ = {isa = PBXBuildFile; fileRef = 79F7EF730AC39638003DAB4E /* MarkdownLiveApp.icns */; }; 
     
    3739                2A37F4C5FDCFA73011CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; }; 
    3840                32DBCF750370BD2300C91783 /* MarkdownLive_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MarkdownLive_Prefix.pch; sourceTree = "<group>"; }; 
    39                 79252F230E8DF46200DFAD98 /* discountInclude.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = discountInclude.h; sourceTree = "<group>"; }; 
    40                 79252F240E8DF46200DFAD98 /* discountInclude.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = discountInclude.c; sourceTree = "<group>"; }; 
    41                 79252F520E8DFAF200DFAD98 /* DDTemporaryFile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDTemporaryFile.m; sourceTree = "<group>"; }; 
    42                 79252F530E8DFAF200DFAD98 /* DDTemporaryFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDTemporaryFile.h; sourceTree = "<group>"; }; 
    43                 79252F540E8DFAF200DFAD98 /* DDTemporaryDirectory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDTemporaryDirectory.m; sourceTree = "<group>"; }; 
    44                 79252F550E8DFAF200DFAD98 /* DDTemporaryDirectory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDTemporaryDirectory.h; sourceTree = "<group>"; }; 
    45                 79252F5D0E8E017E00DFAD98 /* JRLog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JRLog.m; sourceTree = "<group>"; }; 
    46                 79252F5E0E8E017E00DFAD98 /* JRLog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JRLog.h; sourceTree = "<group>"; }; 
    4741                79252FF10E8E080100DFAD98 /* generate.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = generate.c; path = "discount-1.2.10/generate.c"; sourceTree = "<group>"; }; 
     42                792530EE0E8F40F200DFAD98 /* discountWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = discountWrapper.h; sourceTree = "<group>"; }; 
     43                792530EF0E8F40F200DFAD98 /* discountWrapper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = discountWrapper.m; sourceTree = "<group>"; }; 
     44                792530FA0E8F49CE00DFAD98 /* mkdio.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = mkdio.c; path = "discount-1.2.10/mkdio.c"; sourceTree = "<group>"; }; 
     45                792530FE0E8F49E800DFAD98 /* markdown.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = markdown.c; path = "discount-1.2.10/markdown.c"; sourceTree = "<group>"; }; 
     46                792531000E8F4A0900DFAD98 /* resource.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = resource.c; path = "discount-1.2.10/resource.c"; sourceTree = "<group>"; }; 
     47                792531450E8F4CD800DFAD98 /* mkdioWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mkdioWrapper.h; sourceTree = "<group>"; }; 
     48                792531460E8F4CD800DFAD98 /* mkdioWrapper.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mkdioWrapper.c; sourceTree = "<group>"; }; 
     49                792531490E8F4E4D00DFAD98 /* markdownWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = markdownWrapper.h; sourceTree = "<group>"; }; 
     50                7925314A0E8F4E4D00DFAD98 /* markdownWrapper.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = markdownWrapper.c; sourceTree = "<group>"; }; 
    4851                796A2AD70A20DCEE00440275 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = /System/Library/Frameworks/WebKit.framework; sourceTree = "<absolute>"; }; 
    4952                79F7EF730AC39638003DAB4E /* MarkdownLiveApp.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = MarkdownLiveApp.icns; sourceTree = "<group>"; }; 
     
    9699                        children = ( 
    97100                                2A37F4ABFDCFA73011CA2CEA /* Classes */, 
     101                                792530F90E8F49C600DFAD98 /* discount */, 
    98102                                2A37F4AFFDCFA73011CA2CEA /* Other Sources */, 
    99103                                2A37F4B8FDCFA73011CA2CEA /* Resources */, 
     
    109113                                2A37F4AEFDCFA73011CA2CEA /* MyDocument.h */, 
    110114                                2A37F4ACFDCFA73011CA2CEA /* MyDocument.m */, 
    111                                 79252F230E8DF46200DFAD98 /* discountInclude.h */, 
    112                                 79252F240E8DF46200DFAD98 /* discountInclude.c */, 
    113                                 79252F520E8DFAF200DFAD98 /* DDTemporaryFile.m */, 
    114                                 79252F530E8DFAF200DFAD98 /* DDTemporaryFile.h */, 
    115                                 79252F540E8DFAF200DFAD98 /* DDTemporaryDirectory.m */, 
    116                                 79252F550E8DFAF200DFAD98 /* DDTemporaryDirectory.h */, 
    117                                 79252F5D0E8E017E00DFAD98 /* JRLog.m */, 
    118                                 79252F5E0E8E017E00DFAD98 /* JRLog.h */, 
    119                                 79252FF10E8E080100DFAD98 /* generate.c */, 
    120115                        ); 
    121116                        name = Classes; 
     
    125120                        isa = PBXGroup; 
    126121                        children = ( 
     122                                2A37F4B0FDCFA73011CA2CEA /* main.m */, 
    127123                                32DBCF750370BD2300C91783 /* MarkdownLive_Prefix.pch */, 
    128                                 2A37F4B0FDCFA73011CA2CEA /* main.m */, 
    129124                        ); 
    130125                        name = "Other Sources"; 
     
    151146                        ); 
    152147                        name = Frameworks; 
     148                        sourceTree = "<group>"; 
     149                }; 
     150                792530F90E8F49C600DFAD98 /* discount */ = { 
     151                        isa = PBXGroup; 
     152                        children = ( 
     153                                792530EE0E8F40F200DFAD98 /* discountWrapper.h */, 
     154                                792530EF0E8F40F200DFAD98 /* discountWrapper.m */, 
     155                                792531450E8F4CD800DFAD98 /* mkdioWrapper.h */, 
     156                                792531460E8F4CD800DFAD98 /* mkdioWrapper.c */, 
     157                                792531490E8F4E4D00DFAD98 /* markdownWrapper.h */, 
     158                                7925314A0E8F4E4D00DFAD98 /* markdownWrapper.c */, 
     159                                792530FA0E8F49CE00DFAD98 /* mkdio.c */, 
     160                                792530FE0E8F49E800DFAD98 /* markdown.c */, 
     161                                79252FF10E8E080100DFAD98 /* generate.c */, 
     162                                792531000E8F4A0900DFAD98 /* resource.c */, 
     163                        ); 
     164                        name = discount; 
    153165                        sourceTree = "<group>"; 
    154166                }; 
     
    213225                                8D15AC310486D014006FF6A4 /* MyDocument.m in Sources */, 
    214226                                8D15AC320486D014006FF6A4 /* main.m in Sources */, 
    215                                 79252F250E8DF46200DFAD98 /* discountInclude.c in Sources */, 
    216                                 79252F560E8DFAF200DFAD98 /* DDTemporaryFile.m in Sources */, 
    217                                 79252F570E8DFAF200DFAD98 /* DDTemporaryDirectory.m in Sources */, 
    218                                 79252F5F0E8E017E00DFAD98 /* JRLog.m in Sources */, 
    219227                                79252FF20E8E080100DFAD98 /* generate.c in Sources */, 
     228                                792530F00E8F40F200DFAD98 /* discountWrapper.m in Sources */, 
     229                                792530FB0E8F49CE00DFAD98 /* mkdio.c in Sources */, 
     230                                792530FF0E8F49E800DFAD98 /* markdown.c in Sources */, 
     231                                792531010E8F4A0900DFAD98 /* resource.c in Sources */, 
     232                                792531470E8F4CD800DFAD98 /* mkdioWrapper.c in Sources */, 
     233                                7925314B0E8F4E4D00DFAD98 /* markdownWrapper.c in Sources */, 
    220234                        ); 
    221235                        runOnlyForDeploymentPostprocessing = 0; 
  • trunk/cocoa/MarkdownLive/MyDocument.h

    r330 r333  
    11#import <Cocoa/Cocoa.h> 
    22#import <WebKit/WebKit.h> 
    3 #import "DDTemporaryFile.h" 
    43 
    54@interface MyDocument : NSDocument { 
     
    1514                                NSPoint                                         savedOrigin; 
    1615                                BOOL                                            savedAtBottom; 
    17                 DDTemporaryFile             *markdownSourceTempFile; 
    18                 DDTemporaryFile             *htmlOutputTempFile; 
    1916} 
    2017 
  • trunk/cocoa/MarkdownLive/MyDocument.m

    r331 r333  
    11#import "MyDocument.h" 
    2 #include "discountInclude.h" 
    3 #import "JRLog.h" 
     2#include "discountWrapper.h" 
    43 
    54NSString        *kMarkdownDocumentType = @"MarkdownDocumentType"; 
     
    1514                return @""; 
    1615     
    17     NSError *error = nil; 
    18      
    19     [markdown_ writeToFile:[markdownSourceTempFile fullPath] 
    20                 atomically:NO 
    21                   encoding:NSUTF8StringEncoding 
    22                      error:&error]; 
    23     NSString *html = @"an error occured"; 
    24     if (!error) { 
    25         FILE *markdownSourceTempFILE = fopen([[markdownSourceTempFile fullPath] fileSystemRepresentation], "r"); 
    26         assert(markdownSourceTempFILE); 
    27          
    28         Document *discountContext = mkd_in(markdownSourceTempFILE, 0); 
    29         assert(discountContext); 
    30          
    31         FILE *htmlOutputTempFILE = fopen([[htmlOutputTempFile fullPath] fileSystemRepresentation], "w+"); 
    32         assert(htmlOutputTempFILE); 
    33          
    34         int markdown_result = markdown(discountContext, htmlOutputTempFILE, 0); 
    35         assert(markdown_result == 0); 
    36          
    37         fclose(markdownSourceTempFILE); 
    38         fclose(htmlOutputTempFILE); 
    39          
    40         html = [NSString stringWithContentsOfFile:[htmlOutputTempFile fullPath] 
    41                                          encoding:NSUTF8StringEncoding 
    42                                             error:&error]; 
    43     } 
    44      
    45     if (error) { 
    46         [NSApp presentError:error]; 
    47     } 
    48     return html; 
     16    return discountToHTML(markdown_); 
    4917} 
    5018 
     
    6129                                                                                                                  userInfo:nil 
    6230                                                                                                                   repeats:YES]; 
    63         markdownSourceTempFile = [[DDTemporaryFile alloc] initWithName:@"tmp.markdown"]; 
    64         JRLogDebug(@"markdownSourceTempFile: %@", [markdownSourceTempFile fullPath]); 
    65         htmlOutputTempFile = [[DDTemporaryFile alloc] initWithName:@"tmp.html"]; 
    66         JRLogDebug(@"htmlOutputTempFile: %@", [htmlOutputTempFile fullPath]); 
    6731    } 
    6832    return self; 
     
    7236        [htmlPreviewTimer invalidate]; htmlPreviewTimer = nil; 
    7337        [markdownSource release]; markdownSource = nil; 
    74      
    75     [markdownSourceTempFile release]; 
    76     [htmlOutputTempFile release]; 
    77      
    7838        [super dealloc]; 
    7939} 
     
    8444 
    8545- (void)windowControllerDidLoadNib:(NSWindowController*)controller_ { 
     46    static BOOL engagedAutosave = NO; 
     47    if (!engagedAutosave) { 
     48        engagedAutosave = YES; 
     49        [[NSDocumentController sharedDocumentController] setAutosavingDelay:30.0]; 
     50    } 
    8651    [super windowControllerDidLoadNib:controller_]; 
    8752}