Zeus IDE Forum Index Zeus IDE
Use this forum to ask for help, submit a bug report or make a suggestion.
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Zen Coding

 
Post new topic   Reply to topic    Zeus IDE Forum Index -> Scripts
View previous topic :: View next topic  
Author Message
jussij
Site Admin


Joined: 13 Aug 2004
Posts: 2191

PostPosted: Sun Nov 08, 2009 9:50 am    Post subject: Zen Coding Reply with quote

NOTE: The script below now comes as standard with the Zeus installer. To use this script just run the installer and then bind this macro to a keyboard key or to the menu.

The Zeus macro shown below wraps the Zen Coding plug-in allowing the package to be used from within the Zeus editor.

Installation Procedure

Step 1: Download the Zen Coding plug-in.

Step 2: Copy the following files found in this package:
Code:
__init__.py
settings.py
zen_core.py

into the following folder location:
Code:
C:\Program Files\Zeus\zScript\zencoding

Step 3: Copy the Zeus macro code shown below and save it to the following file:
Code:
C:\Program Files\Zeus\zScript\zeus_zen.py

Testing the Installation

To test the installation do the following:

Step 1: Use the Zeus Macros, Load menu to load the zeus_zen.py macro script created above.

Step 2: Create a new file inside of Zeus and type in the following Zen command.
Code:
html>table>tr*5

Step 3: Use the Zeus Macros, Playback menu to run the loaded macro script and this Zen command will be replaced with the following text expansion:
Code:
<html>
   <table>
      <tr></tr>
      <tr></tr>
      <tr></tr>
      <tr></tr>
      <tr></tr>
   </table>
</html>

Here are some more Zen HTML and CSS examples.

Further Configuration - Bind Macro to the Keyboard

In the example above the macro was loaded and executed using the Macros menu. It is also possible to bind this macro to the keyboard by using the Zeus Options, Editor Options menu, making it much easier to execute.

Macro Code
Code:
#
#         Name: Zen Coding Macro
#       Author: Jussi Jumppanen
#     Language: Python
#  Description:
#
#  This is Zeus Python macro that wraps around the Zen Coding
#  package found here:
#
#      http://code.google.com/p/zen-coding/source/checkout
#
#  For this macro to run the Zen Coding package needs to have been
#  correctly installed.
#
#  This package consists of the following files:
#
#      __init__.py
#      settings.py
#      zen_core.py
#
#  To install the Zen Coding package create the 'zencoding' folder in
#  the 'C:\Program Files\Zeus\zScript' folder and copy the three
#  files listed above to this new folder.
#
#  Zen HTML Examples:
#      http://code.google.com/p/zen-coding/wiki/ZenHTMLElementsEn
#
#  Zen CSS Examples:
#      http://code.google.com/p/zen-coding/wiki/ZenCSSPropertiesEn
#

import os
import re
import zeus

from zencoding import zen_core as zen
from zencoding.settings import zen_settings

def key_macro():
    locked = zeus.is_read_only()
    document = zeus.is_document()

    # macro only works for read/write documents.
    if (document == 1) and (locked == 0):
        zeus.screen_update_disable()

        zen.newline = '\n'
        zen.insertion_point = '##IP##'

        # get the current line details
        cur_line = zeus.get_line_text()
        cur_index = zeus.cursor_to_index(zeus.get_line_pos(), zeus.get_cursor_pos())

        # check for the end of line case
        cur_index = min(cur_index, len(cur_line))

        # make sure we are not past the EOL
        if zeus.is_cursor_online() == 0:
            zeus.MoveLineEnd()

            # no end of line text
            end_line = ""
        else:
            # get the end of line text
            end_line = cur_line[cur_index:len(cur_line)]

        # Help with bebugging
        #zeus.message_box(1, "line: " + cur_line + " index: " + str(cur_index))

        if cur_index > 0:
            # look for a Zen abbreviation
            abbr, start_index = zen.find_abbr_in_line(cur_line, cur_index)

            if abbr:
                # Help with bebugging
                #zeus.message_box(1, "abbr : " + abbr + " start: " + str(start_index))

                # get the current file extensions
                extension = zeus.macro_tag("$Ext")

                # set the document type based on the extension
                if (extension.lower() == ".css" ):
                    doc_type = 'xsl'
                else:
                    doc_type = 'html'

                # build up a new line by expanding out the Zen abbreviation
                result = zen.expand_abbr(abbr, doc_type)

                # Help with debugging
                #zeus.message_box(1, "result: " + result + "(" + abbr + ")")

                if result:
                    # the complete new line
                    result = cur_line[0:start_index] + result

                    # see if the current line had any padding
                    cur_line_pad = re.match(r'^(\s+)', cur_line)

                    if cur_line_pad:
                        # add the padding to the new line
                        result = zen.pad_string(result, cur_line_pad.group(1))

                    # see if spaces are being used for tabs
                    if zeus.macro_tag("$UseTabs") == 'false':
                        # get the tab size for the current document
                        tab_size = zeus.macro_tag("$TabSize")

                        # expand the tab characters into spaces
                        result = result.expandtabs(int(tab_size))

                    # remove the current line
                    zeus.MoveLineHome()
                    zeus.LineDeleteEnd()

                    # add in the end of line text
                    result = result + end_line

                    # write out the new line including the abbreviation
                    zeus.write(result, 0)

                    # try to look for an insertion point
                    if (result.find(zen.insertion_point) <> -1):
                        # save the current search options
                        zeus.search_options_save()
                        zeus.set_search_option("Scope"     , 0)
                        zeus.set_search_option("WholeWord" , 0)
                        zeus.set_search_option("UseCase"   , 0)
                        zeus.set_search_option("RegExpress", 0)
                        # find the insertion point
                        zeus.set_find_text(zen.insertion_point)
                        # put the cursor at the insertion point
                        zeus.set_cursor_pos(start_index + 1)
                        # locate insertion point
                        zeus.SearchPrevious()
                        # remove the insertion point text
                        zeus.MarkDelete()
                        # restore the saved search options
                        zeus.search_options_restore()
                else:
                    # give some feedback
                    zeus.message("The current line does not contain a valid Zen Code abbreviation.")
                    zeus.beep()
            else:
                # give some feedback
                zeus.message("The current line does not contain a valid Zen Code abbreviation.")
                zeus.beep()

        zeus.screen_update_enable()
    else:
        zeus.message("This macro only works for writable document files!")
        zeus.beep()

key_macro() # run the macro

Cheers Jussi
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic    Zeus IDE Forum Index -> Scripts All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group