logback-dev
Threads by month
- ----- 2025 -----
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
August 2008
- 7 participants
- 94 discussions

19 Aug '08
Author: ceki
Date: Tue Aug 19 21:47:22 2008
New Revision: 1766
Added:
logback/trunk/logback-core/src/test/input/joran/skip/
logback/trunk/logback-core/src/test/input/joran/skip/badBegin1.xml
logback/trunk/logback-core/src/test/input/joran/skip/badBegin2.xml
logback/trunk/logback-core/src/test/input/joran/skip/badEnd1.xml
- copied unchanged from r1761, /logback/trunk/logback-core/src/test/input/joran/badEnd1.xml
logback/trunk/logback-core/src/test/input/joran/skip/badEnd2.xml
- copied, changed from r1761, /logback/trunk/logback-core/src/test/input/joran/badEnd2.xml
Removed:
logback/trunk/logback-core/src/test/input/joran/badEnd1.xml
logback/trunk/logback-core/src/test/input/joran/badEnd2.xml
logback/trunk/logback-core/src/test/input/joran/exception1.xml
logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/action/ext/SoccerPlayer.java
Modified:
logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/AppenderAction.java
logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/MatcherAction.java
logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/StatusListenerAction.java
logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/spi/ActionException.java
logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/spi/Interpreter.java
logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/PackageTest.java
logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/SkippingInInterpreterTest.java
logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/action/IncludeActionTest.java
logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/action/ext/BadBeginAction.java
logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/action/ext/BadEndAction.java
logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/action/ext/IncAction.java
logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/implicitAction/FruitContextAction.java
logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/replay/FruitShellAction.java
Log:
Related to LBCLASSIC-63
Since we now only support skipping children, removed the SkipCode enumeration from the code.
Added test cases making sure that the bug was corrected.
Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/AppenderAction.java
==============================================================================
--- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/AppenderAction.java (original)
+++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/AppenderAction.java Tue Aug 19 21:47:22 2008
@@ -17,7 +17,6 @@
import ch.qos.logback.core.Appender;
import ch.qos.logback.core.joran.spi.ActionException;
import ch.qos.logback.core.joran.spi.InterpretationContext;
-import ch.qos.logback.core.joran.spi.ActionException.SkipCode;
import ch.qos.logback.core.spi.LifeCycle;
import ch.qos.logback.core.util.OptionHelper;
@@ -80,7 +79,7 @@
inError = true;
addError(
"Could not create an Appender of type ["+className+"].", oops);
- throw new ActionException(SkipCode.SKIP_CHILDREN, oops);
+ throw new ActionException(oops);
}
}
Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/MatcherAction.java
==============================================================================
--- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/MatcherAction.java (original)
+++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/MatcherAction.java Tue Aug 19 21:47:22 2008
@@ -15,7 +15,6 @@
import ch.qos.logback.core.boolex.Matcher;
import ch.qos.logback.core.joran.spi.ActionException;
import ch.qos.logback.core.joran.spi.InterpretationContext;
-import ch.qos.logback.core.joran.spi.ActionException.SkipCode;
import ch.qos.logback.core.util.OptionHelper;
@@ -58,7 +57,7 @@
inError = true;
addError("Could not attach matcher to JaninoEventEvaluator",
oops);
- throw new ActionException(SkipCode.SKIP_CHILDREN, oops);
+ throw new ActionException(oops);
}
}
Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/StatusListenerAction.java
==============================================================================
--- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/StatusListenerAction.java (original)
+++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/StatusListenerAction.java Tue Aug 19 21:47:22 2008
@@ -14,7 +14,6 @@
import ch.qos.logback.core.joran.spi.ActionException;
import ch.qos.logback.core.joran.spi.InterpretationContext;
-import ch.qos.logback.core.joran.spi.ActionException.SkipCode;
import ch.qos.logback.core.spi.LifeCycle;
import ch.qos.logback.core.status.StatusListener;
import ch.qos.logback.core.util.OptionHelper;
@@ -46,7 +45,7 @@
inError = true;
addError(
"Could not create an StatusListener of type ["+className+"].", e);
- throw new ActionException(SkipCode.SKIP_CHILDREN, e);
+ throw new ActionException(e);
}
}
Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/spi/ActionException.java
==============================================================================
--- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/spi/ActionException.java (original)
+++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/spi/ActionException.java Tue Aug 19 21:47:22 2008
@@ -12,44 +12,21 @@
/**
* By throwing an exception an action can signal the Interpreter to skip
- * processing, all the nested elements nested within the element throwing the
- * exception or skip all following sibling elements in the document.
+ * processing of all the nested (child) elements of the element associated with
+ * the action causing the exception.
*
* @author Ceki Gulcu
*/
public class ActionException extends Exception {
- public enum SkipCode {
- /**
- * SKIP_CHILDREN signals the {@link Interpreter} to skip processing all the
- * nested elements contained within the element causing this ActionException.
- *
- * <p>It is the only recognized skipping mode in Joran.
- */
- SKIP_CHILDREN;
- }
-
private static final long serialVersionUID = 2743349809995319806L;
-
- final Throwable rootCause;
- final SkipCode skipCode;
-
- public ActionException(final SkipCode skipCode) {
- this(skipCode, null);
+ public ActionException() {
}
- public ActionException(final SkipCode skipCode, final Throwable rootCause) {
- this.skipCode = skipCode;
- this.rootCause = rootCause;
+ public ActionException(final Throwable rootCause) {
+ super(rootCause);
}
- public Throwable getCause() {
- return rootCause;
- }
-
- public SkipCode getSkipCode() {
- return skipCode;
- }
}
Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/spi/Interpreter.java
==============================================================================
--- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/spi/Interpreter.java (original)
+++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/spi/Interpreter.java Tue Aug 19 21:47:22 2008
@@ -60,9 +60,9 @@
* @author Ceki Gülcuü
*
*/
-public class Interpreter {
+public class Interpreter {
private static List EMPTY_LIST = new Vector(0);
-
+
final private RuleStore ruleStore;
final private InterpretationContext ec;
final private ArrayList<ImplicitAction> implicitActions;
@@ -71,7 +71,7 @@
Locator locator;
EventPlayer player;
- /**
+ /**
* The <id>actionListStack</id> contains a list of actions that are executing
* for the given XML element.
*
@@ -90,7 +90,7 @@
public Interpreter(Context context, RuleStore rs) {
this.cai = new CAI_WithLocatorSupport(this);
this.cai.setContext(context);
- ruleStore = rs;
+ ruleStore = rs;
ec = new InterpretationContext(context, this);
implicitActions = new ArrayList<ImplicitAction>(3);
pattern = new Pattern();
@@ -109,9 +109,9 @@
setDocumentLocator(se.getLocator());
startElement(se.namespaceURI, se.localName, se.qName, se.attributes);
}
-
- private void startElement(String namespaceURI, String localName, String qName,
- Attributes atts) {
+
+ private void startElement(String namespaceURI, String localName,
+ String qName, Attributes atts) {
String tagName = getTagName(localName, qName);
@@ -120,7 +120,7 @@
pattern.push(tagName);
List applicableActionList = getApplicableActionList(pattern, atts);
-
+
if (applicableActionList != null) {
actionListStack.add(applicableActionList);
callBeginAction(applicableActionList, tagName, atts);
@@ -136,7 +136,7 @@
public void characters(BodyEvent be) {
setDocumentLocator(be.locator);
-
+
String body = be.getText();
List applicableActionList = (List) actionListStack.peek();
@@ -161,7 +161,8 @@
if (skip != null) {
if (skip.equals(pattern)) {
skip = null;
- callEndAction(applicableActionList, getTagName(localName, qName));
+ // FIXME
+ // callEndAction(applicableActionList, getTagName(localName, qName));
}
} else if (applicableActionList != EMPTY_LIST) {
callEndAction(applicableActionList, getTagName(localName, qName));
@@ -251,17 +252,12 @@
// exceptions
try {
action.begin(ec, tagName, atts);
- } catch (ActionException ae) {
- switch (ae.getSkipCode()) {
- case SKIP_CHILDREN:
- skip = (Pattern) pattern.clone();
- break;
- }
- // getLogger().info("Skip pattern set to [{}]", skip);
- } catch (Exception e) {
+ } catch (ActionException e) {
skip = (Pattern) pattern.clone();
- // getLogger().info("Skip pattern set to [{}]", skip);
- cai.addError("Exception in Action for tag [" + tagName + "]", e);
+ cai.addError("ActionException in Action for tag [" + tagName + "]", e);
+ } catch (RuntimeException e) {
+ skip = (Pattern) pattern.clone();
+ cai.addError("RuntimeException in Action for tag [" + tagName + "]", e);
}
}
}
@@ -277,7 +273,9 @@
try {
action.body(ec, body);
} catch (ActionException ae) {
- cai.addError("Exception in end() methd for action [" + action + "]", ae);
+ cai
+ .addError("Exception in end() methd for action [" + action + "]",
+ ae);
}
}
}
@@ -297,16 +295,12 @@
try {
action.end(ec, tagName);
} catch (ActionException ae) {
- switch (ae.getSkipCode()) {
- case SKIP_CHILDREN:
- // after end() is called there can't be any children
- break;
- }
- } catch (Exception e) {
- cai.addError("Exception in Action for tag [" + tagName + "]", e);
- skip = (Pattern) pattern.clone();
- skip.pop(); // induce the siblings to be skipped
- // getLogger().info("Skip pattern set to [{}].", skip);
+ // at this point endAction, there is no point in skipping children as
+ // they have been already processed
+ cai.addError("ActionException in Action for tag [" + tagName + "]", ae);
+ } catch (RuntimeException e) {
+ // no point in setting skip
+ cai.addError("RuntimeException in Action for tag [" + tagName + "]", e);
}
}
}
@@ -314,11 +308,11 @@
public RuleStore getRuleStore() {
return ruleStore;
}
-
+
public void play(List<SaxEvent> eventList) {
player.play(eventList);
}
-
+
public void addEvents(List<SaxEvent> eventList) {
if (player != null) {
player.addEvents(eventList);
@@ -327,26 +321,27 @@
}
/**
- * When {@link Interpreter} class is used as the origin of an
- * {@link ContextAwareImpl} instance, then XML locator information
- * is lost. This class preserves locator information (as a string).
+ * When {@link Interpreter} class is used as the origin of an
+ * {@link ContextAwareImpl} instance, then XML locator information is lost. This
+ * class preserves locator information (as a string).
*
* @author ceki
*/
class CAI_WithLocatorSupport extends ContextAwareImpl {
-
+
CAI_WithLocatorSupport(Interpreter interpreter) {
super(interpreter);
}
-
+
@Override
protected Object getOrigin() {
Interpreter i = (Interpreter) super.getOrigin();
Locator locator = i.locator;
- if(locator != null) {
- return Interpreter.class.getName()+"@"+locator.getLineNumber()+":"+locator.getColumnNumber();
+ if (locator != null) {
+ return Interpreter.class.getName() + "@" + locator.getLineNumber() + ":"
+ + locator.getColumnNumber();
} else {
- return Interpreter.class.getName()+"@NA:NA";
+ return Interpreter.class.getName() + "@NA:NA";
}
}
}
Added: logback/trunk/logback-core/src/test/input/joran/skip/badBegin1.xml
==============================================================================
--- (empty file)
+++ logback/trunk/logback-core/src/test/input/joran/skip/badBegin1.xml Tue Aug 19 21:47:22 2008
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE test>
+
+<test>
+
+ <!-- this action throws an exception in the Action.begin method -->
+ <badBegin>
+ <touch/>
+ <touch/>
+ </badBegin>
+
+ <hello name="John Doe"></hello>
+
+</test>
\ No newline at end of file
Added: logback/trunk/logback-core/src/test/input/joran/skip/badBegin2.xml
==============================================================================
--- (empty file)
+++ logback/trunk/logback-core/src/test/input/joran/skip/badBegin2.xml Tue Aug 19 21:47:22 2008
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE test>
+
+<test>
+
+ <!-- this action throws an ActionException in the Action.begin method -->
+ <badBegin type="ActionException">
+ <touch/>
+ <touch/>
+ </badBegin>
+
+ <hello name="John Doe"></hello>
+
+</test>
\ No newline at end of file
Copied: logback/trunk/logback-core/src/test/input/joran/skip/badEnd2.xml (from r1761, /logback/trunk/logback-core/src/test/input/joran/badEnd2.xml)
==============================================================================
--- /logback/trunk/logback-core/src/test/input/joran/badEnd2.xml (original)
+++ logback/trunk/logback-core/src/test/input/joran/skip/badEnd2.xml Tue Aug 19 21:47:22 2008
@@ -5,7 +5,7 @@
<isolate>
<!-- badEnd throws an exception in the Action.end method -->
- <badEnd>
+ <badEnd type="ActionException">
<touch/>
</badEnd>
<!-- should be skipped -->
Modified: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/PackageTest.java
==============================================================================
--- logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/PackageTest.java (original)
+++ logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/PackageTest.java Tue Aug 19 21:47:22 2008
@@ -18,7 +18,7 @@
public static Test suite() {
TestSuite suite = new TestSuite();
- suite.addTestSuite(SkippingInInterpreterTest.class);
+ suite.addTest(new JUnit4TestAdapter(SkippingInInterpreterTest.class));
suite.addTest(new JUnit4TestAdapter(TrivialcConfiguratorTest.class));
suite.addTest(ch.qos.logback.core.joran.action.PackageTest.suite());
suite.addTest(ch.qos.logback.core.joran.event.PackageTest.suite());
Modified: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/SkippingInInterpreterTest.java
==============================================================================
--- logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/SkippingInInterpreterTest.java (original)
+++ logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/SkippingInInterpreterTest.java Tue Aug 19 21:47:22 2008
@@ -9,23 +9,26 @@
*/
package ch.qos.logback.core.joran;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+
import java.util.HashMap;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
-import junit.framework.TestCase;
+import org.junit.Test;
+
import ch.qos.logback.core.Context;
import ch.qos.logback.core.ContextBase;
import ch.qos.logback.core.joran.action.Action;
import ch.qos.logback.core.joran.action.NOPAction;
import ch.qos.logback.core.joran.action.ext.BadBeginAction;
-import ch.qos.logback.core.joran.action.ext.BadEndAction;
import ch.qos.logback.core.joran.action.ext.HelloAction;
import ch.qos.logback.core.joran.action.ext.TouchAction;
import ch.qos.logback.core.joran.spi.Pattern;
import ch.qos.logback.core.util.Constants;
-
+import ch.qos.logback.core.util.StatusPrinter;
/**
* Test the way Interpreter skips elements in case of exceptions thrown by
@@ -33,97 +36,70 @@
*
* @author Ceki Gulcu
*/
-public class SkippingInInterpreterTest extends TestCase {
+public class SkippingInInterpreterTest {
HashMap<Pattern, Action> rulesMap = new HashMap<Pattern, Action>();
Context context = new ContextBase();
-
- public SkippingInInterpreterTest(String name) {
- super(name);
-
- }
-
- protected void setUp() throws Exception {
- super.setUp();
- }
-
- /*
- * @see TestCase#tearDown()
- */
- protected void tearDown() throws Exception {
- super.tearDown();
- }
SAXParser createParser() throws Exception {
SAXParserFactory spf = SAXParserFactory.newInstance();
return spf.newSAXParser();
}
- /**
- * Tests that whenever an action throws an exception, processing of child
- * elements is skipped.
- *
- * @throws Exception
- */
- public void testChildrenSkipping() throws Exception {
-
+ void doTest(String filename) throws Exception {
+
rulesMap.put(new Pattern("test"), new NOPAction());
rulesMap.put(new Pattern("test/badBegin"), new BadBeginAction());
rulesMap.put(new Pattern("test/badBegin/touch"), new TouchAction());
rulesMap.put(new Pattern("test/hello"), new HelloAction());
-
+
TrivialConfigurator tc = new TrivialConfigurator(rulesMap);
tc.setContext(context);
-
- tc.doConfigure(Constants.TEST_DIR_PREFIX + "input/joran/exception1.xml");
+ tc .doConfigure(Constants.TEST_DIR_PREFIX
+ + "input/joran/skip/"+filename);
String str = context.getProperty("hello");
assertEquals("Hello John Doe.", str);
Object i = (String) context.getObject(TouchAction.KEY);
assertNull(i);
+
+ StatusPrinter.print(context);
}
/**
- * An exception thrown by the end() method of an action will cause sibling
- * elements to be skipped.
- *
- * @throws Exception
+ * Tests that whenever an action throws a RuntimeException, processing of
+ * child elements is skipped.
*/
- public void testSkipSiblings() throws Exception {
-
- rulesMap.put(new Pattern("test"), new NOPAction());
- rulesMap.put(new Pattern("test/badEnd"), new BadEndAction());
- rulesMap.put(new Pattern("test/badEnd/touch"), new TouchAction());
- rulesMap.put(new Pattern("test/hello"), new HelloAction());
-
- TrivialConfigurator tc = new TrivialConfigurator(rulesMap);
- tc.setContext(context);
-
- tc.doConfigure(Constants.TEST_DIR_PREFIX + "input/joran/badEnd1.xml");
-
-
- String str = context.getProperty("hello");
- assertNull(str);
- Integer i = (Integer) context.getObject(TouchAction.KEY);
- assertEquals(2, i.intValue());
+ @Test
+ public void testSkippingRuntimeExInBadBegin() throws Exception {
+ doTest("badBegin1.xml");
}
- public void testSkipSiblings2() throws Exception {
+ /**
+ * Tests that whenever an action throws a RuntimeException, processing of
+ * child elements is skipped.
+ */
+ @Test
+ public void testSkippingActionExInBadBegin() throws Exception {
+ doTest("badBegin2.xml");
+ }
- rulesMap.put(new Pattern("test"), new NOPAction());
- rulesMap.put(new Pattern("test/isolate/badEnd"), new BadEndAction());
- rulesMap.put(new Pattern("*/touch"), new TouchAction());
- rulesMap.put(new Pattern("test/hello"), new HelloAction());
+ /**
+ * A RuntimeException thrown by the end() method of an action will be caught without
+ * further consequences (as there are no children).
+ */
+ @Test
+ public void testSkippingRuntimeExInBadEnd() throws Exception {
+ doTest("badEnd1.xml");
+ }
- TrivialConfigurator tc = new TrivialConfigurator(rulesMap);
- tc.setContext(context);
-
- tc.doConfigure(Constants.TEST_DIR_PREFIX + "input/joran/badEnd2.xml");
-
- String str = context.getProperty("hello");
- assertEquals("Hello John Doe.", str);
- Integer i = (Integer) context.getObject(TouchAction.KEY);
- assertEquals(1, i.intValue());
+ /**
+ * An ActionException thrown by the end() method of an action will be caught without
+ * further consequences (as there are no children).
+ */
+ @Test
+ public void testSkippingActionExInBadEnd() throws Exception {
+ doTest("badEnd2.xml");
}
}
Modified: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/action/IncludeActionTest.java
==============================================================================
--- logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/action/IncludeActionTest.java (original)
+++ logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/action/IncludeActionTest.java Tue Aug 19 21:47:22 2008
@@ -155,6 +155,12 @@
verifyConfig(3);
}
+ @Test
+ public void errorInDoBegin() {
+
+ }
+
+
void verifyConfig(int expected) {
assertEquals(expected, IncAction.beginCount);
assertEquals(expected, IncAction.endCount);
Modified: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/action/ext/BadBeginAction.java
==============================================================================
--- logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/action/ext/BadBeginAction.java (original)
+++ logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/action/ext/BadBeginAction.java Tue Aug 19 21:47:22 2008
@@ -13,6 +13,7 @@
import org.xml.sax.Attributes;
import ch.qos.logback.core.joran.action.Action;
+import ch.qos.logback.core.joran.spi.ActionException;
import ch.qos.logback.core.joran.spi.InterpretationContext;
@@ -20,11 +21,30 @@
public class BadBeginAction extends Action {
+ static String EXCEPTION_TYPE = "type";
+ static final int RUNTIME_EDXCEPTION = 0;
+ static final int ACTION_EXCEPTION = 1;
+
+ int type;
+
public BadBeginAction() {
}
- public void begin(InterpretationContext ec, String name, Attributes attributes) {
- throw new IllegalStateException("bad begin");
+ public void begin(InterpretationContext ec, String name, Attributes attributes) throws ActionException {
+
+ String exType = attributes.getValue(EXCEPTION_TYPE);
+ type = RUNTIME_EDXCEPTION;
+ if("ActionException".equals(exType)) {
+ type = ACTION_EXCEPTION;
+ }
+
+ switch(type) {
+ case ACTION_EXCEPTION:
+ throw new ActionException();
+ default:
+ throw new IllegalStateException("bad begin");
+ }
+
}
public void end(InterpretationContext ec, String name) {
Modified: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/action/ext/BadEndAction.java
==============================================================================
--- logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/action/ext/BadEndAction.java (original)
+++ logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/action/ext/BadEndAction.java Tue Aug 19 21:47:22 2008
@@ -14,17 +14,34 @@
import org.xml.sax.Attributes;
import ch.qos.logback.core.joran.action.Action;
+import ch.qos.logback.core.joran.spi.ActionException;
import ch.qos.logback.core.joran.spi.InterpretationContext;
public class BadEndAction extends Action {
-
+ static String EXCEPTION_TYPE = "type";
+ static final int RUNTIME_EDXCEPTION = 0;
+ static final int ACTION_EXCEPTION = 1;
+
+ int type;
+
+
public void begin(InterpretationContext ec, String name, Attributes attributes) {
+ String exType = attributes.getValue(EXCEPTION_TYPE);
+ type = RUNTIME_EDXCEPTION;
+ if("ActionException".equals(exType)) {
+ type = ACTION_EXCEPTION;
+ }
}
- public void end(InterpretationContext ec, String name) {
- throw new IllegalStateException("bad end");
+ public void end(InterpretationContext ec, String name) throws ActionException {
+ switch(type) {
+ case ACTION_EXCEPTION:
+ throw new ActionException();
+ default:
+ throw new IllegalStateException("bad end");
+ }
}
}
Modified: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/action/ext/IncAction.java
==============================================================================
--- logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/action/ext/IncAction.java (original)
+++ logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/action/ext/IncAction.java Tue Aug 19 21:47:22 2008
@@ -15,7 +15,6 @@
import ch.qos.logback.core.joran.action.Action;
import ch.qos.logback.core.joran.spi.ActionException;
import ch.qos.logback.core.joran.spi.InterpretationContext;
-import ch.qos.logback.core.joran.spi.ActionException.SkipCode;
@@ -40,7 +39,7 @@
String val = attributes.getValue("increment");
if(!"1".equals(val)) {
errorCount++;
- throw new ActionException(SkipCode.SKIP_CHILDREN);
+ throw new ActionException();
}
}
Modified: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/implicitAction/FruitContextAction.java
==============================================================================
--- logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/implicitAction/FruitContextAction.java (original)
+++ logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/implicitAction/FruitContextAction.java Tue Aug 19 21:47:22 2008
@@ -15,7 +15,6 @@
import ch.qos.logback.core.joran.action.Action;
import ch.qos.logback.core.joran.spi.ActionException;
import ch.qos.logback.core.joran.spi.InterpretationContext;
-import ch.qos.logback.core.joran.spi.ActionException.SkipCode;
public class FruitContextAction extends Action {
@@ -34,7 +33,7 @@
inError = true;
addError(
"Could not push context", oops);
- throw new ActionException(SkipCode.SKIP_CHILDREN, oops);
+ throw new ActionException(oops);
}
}
Modified: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/replay/FruitShellAction.java
==============================================================================
--- logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/replay/FruitShellAction.java (original)
+++ logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/replay/FruitShellAction.java Tue Aug 19 21:47:22 2008
@@ -15,7 +15,6 @@
import ch.qos.logback.core.joran.action.Action;
import ch.qos.logback.core.joran.spi.ActionException;
import ch.qos.logback.core.joran.spi.InterpretationContext;
-import ch.qos.logback.core.joran.spi.ActionException.SkipCode;
import ch.qos.logback.core.util.OptionHelper;
/**
@@ -55,7 +54,7 @@
inError = true;
addError(
"Could not create an FruitShell", oops);
- throw new ActionException(SkipCode.SKIP_CHILDREN, oops);
+ throw new ActionException(oops);
}
}
1
0

svn commit: r1765 - logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/replay
by noreply.ceki@qos.ch 19 Aug '08
by noreply.ceki@qos.ch 19 Aug '08
19 Aug '08
Author: ceki
Date: Tue Aug 19 19:40:02 2008
New Revision: 1765
Modified:
logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/replay/FruitConfigurationTest.java
logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/replay/PackageTest.java
Log:
- FruitConfigurationTest is now a JUnit4 test
Modified: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/replay/FruitConfigurationTest.java
==============================================================================
--- logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/replay/FruitConfigurationTest.java (original)
+++ logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/replay/FruitConfigurationTest.java Tue Aug 19 19:40:02 2008
@@ -9,10 +9,15 @@
*/
package ch.qos.logback.core.joran.replay;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
import java.util.HashMap;
import java.util.List;
-import junit.framework.TestCase;
+import org.junit.Test;
+
import ch.qos.logback.core.joran.SimpleConfigurator;
import ch.qos.logback.core.joran.action.Action;
import ch.qos.logback.core.joran.action.NOPAction;
@@ -23,22 +28,10 @@
/**
* The Fruit* code is intended to test Joran's replay capability
* */
-public class FruitConfigurationTest extends TestCase {
+public class FruitConfigurationTest {
FruitContext fruitContext = new FruitContext();
- public FruitConfigurationTest(String arg0) {
- super(arg0);
- }
-
- protected void setUp() throws Exception {
- super.setUp();
- }
-
- protected void tearDown() throws Exception {
- super.tearDown();
- }
-
public List<FruitShell> doFirstPart(String filename) throws Exception {
try {
@@ -61,7 +54,7 @@
}
}
- @org.junit.Test
+ @Test
public void fruit1() throws Exception {
List<FruitShell> fsList = doFirstPart("fruit1.xml");
assertNotNull(fsList);
@@ -75,7 +68,9 @@
assertEquals("blue", fruit0.getName());
}
- public void test2() throws Exception {
+
+ @Test
+ public void fruit2() throws Exception {
List<FruitShell> fsList = doFirstPart("fruit2.xml");
assertNotNull(fsList);
assertEquals(2, fsList.size());
@@ -93,10 +88,11 @@
Fruit fruit1 = fs1.fruitFactory.buildFruit();
assertTrue(fruit1 instanceof WeightytFruit);
assertEquals("orange", fruit1.getName());
- assertEquals(1.2, ((WeightytFruit) fruit1).getWeight());
+ assertEquals(1.2, ((WeightytFruit) fruit1).getWeight(), 0.01);
}
- public void testWithSubst() throws Exception {
+ @Test
+ public void withSubst() throws Exception {
List<FruitShell> fsList = doFirstPart("fruitWithSubst.xml");
assertNotNull(fsList);
assertEquals(1, fsList.size());
@@ -108,7 +104,7 @@
Fruit fruit0 = fs0.fruitFactory.buildFruit();
assertTrue(fruit0 instanceof WeightytFruit);
assertEquals("orange-" + oldCount, fruit0.getName());
- assertEquals(1.2, ((WeightytFruit) fruit0).getWeight());
+ assertEquals(1.2, ((WeightytFruit) fruit0).getWeight(), 0.01);
}
}
Modified: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/replay/PackageTest.java
==============================================================================
--- logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/replay/PackageTest.java (original)
+++ logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/replay/PackageTest.java Tue Aug 19 19:40:02 2008
@@ -9,6 +9,7 @@
*/
package ch.qos.logback.core.joran.replay;
+import junit.framework.JUnit4TestAdapter;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
@@ -17,7 +18,7 @@
public static Test suite() {
TestSuite suite = new TestSuite();
- suite.addTestSuite(FruitConfigurationTest.class);
+ suite.addTest(new JUnit4TestAdapter(FruitConfigurationTest.class));
return suite;
}
}
1
0

svn commit: r1764 - in logback/trunk/logback-core/src: main/java/ch/qos/logback/core/joran/action main/java/ch/qos/logback/core/joran/spi test/java/ch/qos/logback/core/joran/action/ext
by noreply.ceki@qos.ch 19 Aug '08
by noreply.ceki@qos.ch 19 Aug '08
19 Aug '08
Author: ceki
Date: Tue Aug 19 19:32:42 2008
New Revision: 1764
Modified:
logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/AppenderAction.java
logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/MatcherAction.java
logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/StatusListenerAction.java
logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/spi/ActionException.java
logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/spi/Interpreter.java
logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/action/ext/IncAction.java
Log:
Related to LBCLASSIC-63
Simplifying the Joran's logic in case of errors within actions.
In case of a failing action, Joran skip the children of the event
associated with the action. In practice, this was already the case.
However, with this commit, we are formally dropping support for
SKIP_SIBLINGS.
Test cases will follow
Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/AppenderAction.java
==============================================================================
--- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/AppenderAction.java (original)
+++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/AppenderAction.java Tue Aug 19 19:32:42 2008
@@ -17,6 +17,7 @@
import ch.qos.logback.core.Appender;
import ch.qos.logback.core.joran.spi.ActionException;
import ch.qos.logback.core.joran.spi.InterpretationContext;
+import ch.qos.logback.core.joran.spi.ActionException.SkipCode;
import ch.qos.logback.core.spi.LifeCycle;
import ch.qos.logback.core.util.OptionHelper;
@@ -79,7 +80,7 @@
inError = true;
addError(
"Could not create an Appender of type ["+className+"].", oops);
- throw new ActionException(ActionException.SKIP_CHILDREN, oops);
+ throw new ActionException(SkipCode.SKIP_CHILDREN, oops);
}
}
Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/MatcherAction.java
==============================================================================
--- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/MatcherAction.java (original)
+++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/MatcherAction.java Tue Aug 19 19:32:42 2008
@@ -15,6 +15,7 @@
import ch.qos.logback.core.boolex.Matcher;
import ch.qos.logback.core.joran.spi.ActionException;
import ch.qos.logback.core.joran.spi.InterpretationContext;
+import ch.qos.logback.core.joran.spi.ActionException.SkipCode;
import ch.qos.logback.core.util.OptionHelper;
@@ -55,9 +56,9 @@
ec.pushObject(matcher);
} catch (Exception oops) {
inError = true;
- addError("Could not attach matcher to JaninoEvenyEvaluator",
+ addError("Could not attach matcher to JaninoEventEvaluator",
oops);
- throw new ActionException(ActionException.SKIP_CHILDREN, oops);
+ throw new ActionException(SkipCode.SKIP_CHILDREN, oops);
}
}
Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/StatusListenerAction.java
==============================================================================
--- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/StatusListenerAction.java (original)
+++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/StatusListenerAction.java Tue Aug 19 19:32:42 2008
@@ -12,9 +12,9 @@
import org.xml.sax.Attributes;
-import ch.qos.logback.core.joran.action.Action;
import ch.qos.logback.core.joran.spi.ActionException;
import ch.qos.logback.core.joran.spi.InterpretationContext;
+import ch.qos.logback.core.joran.spi.ActionException.SkipCode;
import ch.qos.logback.core.spi.LifeCycle;
import ch.qos.logback.core.status.StatusListener;
import ch.qos.logback.core.util.OptionHelper;
@@ -46,7 +46,7 @@
inError = true;
addError(
"Could not create an StatusListener of type ["+className+"].", e);
- throw new ActionException(ActionException.SKIP_CHILDREN, e);
+ throw new ActionException(SkipCode.SKIP_CHILDREN, e);
}
}
Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/spi/ActionException.java
==============================================================================
--- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/spi/ActionException.java (original)
+++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/spi/ActionException.java Tue Aug 19 19:32:42 2008
@@ -19,28 +19,28 @@
*/
public class ActionException extends Exception {
+
+ public enum SkipCode {
+ /**
+ * SKIP_CHILDREN signals the {@link Interpreter} to skip processing all the
+ * nested elements contained within the element causing this ActionException.
+ *
+ * <p>It is the only recognized skipping mode in Joran.
+ */
+ SKIP_CHILDREN;
+ }
+
private static final long serialVersionUID = 2743349809995319806L;
- /**
- * SKIP_CHILDREN signals the {@link Interpreter} to skip processing all the
- * nested elements contained within the element causing this ActionException.
- */
- public static final int SKIP_CHILDREN = 1;
-
- /**
- * SKIP_SIBLINGS signals the {@link Interpreter} to skip processing all the
- * children of this element as well as all the siblings of this elements,
- * including any children they may have.
- */
- public static final int SKIP_SIBLINGS = 2;
+
final Throwable rootCause;
- final int skipCode;
+ final SkipCode skipCode;
- public ActionException(final int skipCode) {
+ public ActionException(final SkipCode skipCode) {
this(skipCode, null);
}
- public ActionException(final int skipCode, final Throwable rootCause) {
+ public ActionException(final SkipCode skipCode, final Throwable rootCause) {
this.skipCode = skipCode;
this.rootCause = rootCause;
}
@@ -49,7 +49,7 @@
return rootCause;
}
- public int getSkipCode() {
+ public SkipCode getSkipCode() {
return skipCode;
}
}
Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/spi/Interpreter.java
==============================================================================
--- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/spi/Interpreter.java (original)
+++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/spi/Interpreter.java Tue Aug 19 19:32:42 2008
@@ -159,15 +159,9 @@
// System.out.println("endElement ["+getTagName(localName, qName)+"]");
if (skip != null) {
- // System.err.println("In End, pattern is "+pattern+", skip pattern
- // "+skip);
if (skip.equals(pattern)) {
- // ec.addInfo("Normal processing will continue with the next element.
- // Current pattern is ["+ pattern+"]", this);
skip = null;
- } else {
- // getLogger().debug("Skipping invoking end() method for [{}].",
- // pattern);
+ callEndAction(applicableActionList, getTagName(localName, qName));
}
} else if (applicableActionList != EMPTY_LIST) {
callEndAction(applicableActionList, getTagName(localName, qName));
@@ -259,15 +253,9 @@
action.begin(ec, tagName, atts);
} catch (ActionException ae) {
switch (ae.getSkipCode()) {
- case ActionException.SKIP_CHILDREN:
+ case SKIP_CHILDREN:
skip = (Pattern) pattern.clone();
break;
- case ActionException.SKIP_SIBLINGS:
- skip = (Pattern) pattern.clone();
- // pretend the exception came from one level up. This will cause
- // all children and following siblings elements to be skipped
- skip.pop();
- break;
}
// getLogger().info("Skip pattern set to [{}]", skip);
} catch (Exception e) {
@@ -310,15 +298,10 @@
action.end(ec, tagName);
} catch (ActionException ae) {
switch (ae.getSkipCode()) {
- case ActionException.SKIP_CHILDREN:
+ case SKIP_CHILDREN:
// after end() is called there can't be any children
break;
- case ActionException.SKIP_SIBLINGS:
- skip = (Pattern) pattern.clone();
- skip.pop();
- break;
}
- // getLogger().info("Skip pattern set to <{}>", skip);
} catch (Exception e) {
cai.addError("Exception in Action for tag [" + tagName + "]", e);
skip = (Pattern) pattern.clone();
Modified: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/action/ext/IncAction.java
==============================================================================
--- logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/action/ext/IncAction.java (original)
+++ logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/action/ext/IncAction.java Tue Aug 19 19:32:42 2008
@@ -15,6 +15,7 @@
import ch.qos.logback.core.joran.action.Action;
import ch.qos.logback.core.joran.spi.ActionException;
import ch.qos.logback.core.joran.spi.InterpretationContext;
+import ch.qos.logback.core.joran.spi.ActionException.SkipCode;
@@ -39,7 +40,7 @@
String val = attributes.getValue("increment");
if(!"1".equals(val)) {
errorCount++;
- throw new ActionException(ActionException.SKIP_SIBLINGS);
+ throw new ActionException(SkipCode.SKIP_CHILDREN);
}
}
1
0

svn commit: r1763 - in logback/trunk/logback-classic: . src/test/java/ch/qos/logback/classic
by noreply.ceki@qos.ch 19 Aug '08
by noreply.ceki@qos.ch 19 Aug '08
19 Aug '08
Author: ceki
Date: Tue Aug 19 19:31:43 2008
New Revision: 1763
Modified:
logback/trunk/logback-classic/pom.xml
logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/LoggerPerfTest.java
Log:
- BogoPerf is NOW in slf4j-api.test.jar
Modified: logback/trunk/logback-classic/pom.xml
==============================================================================
--- logback/trunk/logback-classic/pom.xml (original)
+++ logback/trunk/logback-classic/pom.xml Tue Aug 19 19:31:43 2008
@@ -45,6 +45,14 @@
<scope>compile</scope>
</dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <classifier>tests</classifier>
+ <version>${slf4j.version}</version>
+ <scope>test</scope>
+ </dependency>
+
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
Modified: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/LoggerPerfTest.java
==============================================================================
--- logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/LoggerPerfTest.java (original)
+++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/LoggerPerfTest.java Tue Aug 19 19:31:43 2008
@@ -13,9 +13,11 @@
import java.net.InetAddress;
import junit.framework.TestCase;
+
+import org.slf4j.helpers.BogoPerf;
+
import ch.qos.logback.classic.spi.LoggingEvent;
import ch.qos.logback.classic.turbo.NOPTurboFilter;
-import ch.qos.logback.classic.util.BogoPerf;
import ch.qos.logback.core.appender.NOPAppender;
public class LoggerPerfTest extends TestCase {
1
0

svn commit: r1762 - logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/util
by noreply.ceki@qos.ch 19 Aug '08
by noreply.ceki@qos.ch 19 Aug '08
19 Aug '08
Author: ceki
Date: Tue Aug 19 19:30:28 2008
New Revision: 1762
Removed:
logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/util/BogoPerf.java
Log:
- BogoPerf is not in slf4j-api.test.jar
1
0

svn commit: r1761 - in logback/trunk/logback-core: . src/test/input/joran src/test/input/joran/replay src/test/java/ch/qos/logback/core src/test/java/ch/qos/logback/core/joran/implicitAction src/test/java/ch/qos/logback/core/joran/replay
by noreply.ceki@qos.ch 19 Aug '08
by noreply.ceki@qos.ch 19 Aug '08
19 Aug '08
Author: ceki
Date: Tue Aug 19 19:21:52 2008
New Revision: 1761
Added:
logback/trunk/logback-core/src/test/input/joran/replay/
logback/trunk/logback-core/src/test/input/joran/replay/fruit1.xml
- copied unchanged from r1704, /logback/trunk/logback-core/src/test/input/joran/fruit1.xml
logback/trunk/logback-core/src/test/input/joran/replay/fruit2.xml
- copied unchanged from r1704, /logback/trunk/logback-core/src/test/input/joran/fruit2.xml
logback/trunk/logback-core/src/test/input/joran/replay/fruitWithSubst.xml
- copied unchanged from r1704, /logback/trunk/logback-core/src/test/input/joran/fruitWithSubst.xml
logback/trunk/logback-core/src/test/java/ch/qos/logback/core/AllCoreTest.java
- copied, changed from r1704, /logback/trunk/logback-core/src/test/java/ch/qos/logback/core/AllTest.java
Removed:
logback/trunk/logback-core/src/test/input/joran/fruit1.xml
logback/trunk/logback-core/src/test/input/joran/fruit2.xml
logback/trunk/logback-core/src/test/input/joran/fruitWithSubst.xml
logback/trunk/logback-core/src/test/java/ch/qos/logback/core/AllTest.java
Modified:
logback/trunk/logback-core/pom.xml
logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/implicitAction/FruitContextAction.java
logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/replay/FruitConfigurationTest.java
logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/replay/FruitShellAction.java
Log:
- Renamed AllTest as AllCoreTest so that it differs from AllTest
other modules, i.e. logback-classic
- FruitShell code is intended to test Joran's replay capability.
Thus the various config files have been moved under src/test/input/joran/replay
Modified: logback/trunk/logback-core/pom.xml
==============================================================================
--- logback/trunk/logback-core/pom.xml (original)
+++ logback/trunk/logback-core/pom.xml Tue Aug 19 19:21:52 2008
@@ -73,7 +73,7 @@
<reportFormat>plain</reportFormat>
<trimStackTrace>false</trimStackTrace>
<excludes>
- <exclude>**/AllTest.java</exclude>
+ <exclude>**/All*Test.java</exclude>
<exclude>**/PackageTest.java</exclude>
<exclude>**/SizeBasedRollingTest.java</exclude>
</excludes>
Copied: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/AllCoreTest.java (from r1704, /logback/trunk/logback-core/src/test/java/ch/qos/logback/core/AllTest.java)
==============================================================================
--- /logback/trunk/logback-core/src/test/java/ch/qos/logback/core/AllTest.java (original)
+++ logback/trunk/logback-core/src/test/java/ch/qos/logback/core/AllCoreTest.java Tue Aug 19 19:21:52 2008
@@ -13,7 +13,7 @@
import junit.framework.TestCase;
import junit.framework.TestSuite;
-public class AllTest extends TestCase {
+public class AllCoreTest extends TestCase {
public static Test suite() {
TestSuite suite = new TestSuite();
Modified: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/implicitAction/FruitContextAction.java
==============================================================================
--- logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/implicitAction/FruitContextAction.java (original)
+++ logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/implicitAction/FruitContextAction.java Tue Aug 19 19:21:52 2008
@@ -15,6 +15,7 @@
import ch.qos.logback.core.joran.action.Action;
import ch.qos.logback.core.joran.spi.ActionException;
import ch.qos.logback.core.joran.spi.InterpretationContext;
+import ch.qos.logback.core.joran.spi.ActionException.SkipCode;
public class FruitContextAction extends Action {
@@ -33,7 +34,7 @@
inError = true;
addError(
"Could not push context", oops);
- throw new ActionException(ActionException.SKIP_CHILDREN, oops);
+ throw new ActionException(SkipCode.SKIP_CHILDREN, oops);
}
}
Modified: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/replay/FruitConfigurationTest.java
==============================================================================
--- logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/replay/FruitConfigurationTest.java (original)
+++ logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/replay/FruitConfigurationTest.java Tue Aug 19 19:21:52 2008
@@ -1,11 +1,18 @@
+/**
+ * Logback: the generic, reliable, fast and flexible logging framework.
+ *
+ * Copyright (C) 2000-2008, QOS.ch
+ *
+ * This library is free software, you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation.
+ */
package ch.qos.logback.core.joran.replay;
import java.util.HashMap;
import java.util.List;
-import junit.framework.Test;
import junit.framework.TestCase;
-import junit.framework.TestSuite;
import ch.qos.logback.core.joran.SimpleConfigurator;
import ch.qos.logback.core.joran.action.Action;
import ch.qos.logback.core.joran.action.NOPAction;
@@ -13,6 +20,9 @@
import ch.qos.logback.core.util.Constants;
import ch.qos.logback.core.util.StatusPrinter;
+/**
+ * The Fruit* code is intended to test Joran's replay capability
+ * */
public class FruitConfigurationTest extends TestCase {
FruitContext fruitContext = new FruitContext();
@@ -41,7 +51,7 @@
simpleConfigurator.setContext(fruitContext);
- simpleConfigurator.doConfigure(Constants.TEST_DIR_PREFIX + "input/joran/"
+ simpleConfigurator.doConfigure(Constants.TEST_DIR_PREFIX + "input/joran/replay/"
+ filename);
return fruitContext.getFruitShellList();
@@ -51,7 +61,8 @@
}
}
- public void test1() throws Exception {
+ @org.junit.Test
+ public void fruit1() throws Exception {
List<FruitShell> fsList = doFirstPart("fruit1.xml");
assertNotNull(fsList);
assertEquals(1, fsList.size());
@@ -100,10 +111,4 @@
assertEquals(1.2, ((WeightytFruit) fruit0).getWeight());
}
- public static Test suite() {
- TestSuite suite = new TestSuite();
- // suite.addTest(new FruitConfigurationTest("testWithSubst"));
- suite.addTestSuite(FruitConfigurationTest.class);
- return suite;
- }
}
Modified: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/replay/FruitShellAction.java
==============================================================================
--- logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/replay/FruitShellAction.java (original)
+++ logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/replay/FruitShellAction.java Tue Aug 19 19:21:52 2008
@@ -15,8 +15,12 @@
import ch.qos.logback.core.joran.action.Action;
import ch.qos.logback.core.joran.spi.ActionException;
import ch.qos.logback.core.joran.spi.InterpretationContext;
+import ch.qos.logback.core.joran.spi.ActionException.SkipCode;
import ch.qos.logback.core.util.OptionHelper;
+/**
+ * The Fruit* code is intended to test Joran's replay capability
+ * */
public class FruitShellAction extends Action {
FruitShell fruitShell;
@@ -51,7 +55,7 @@
inError = true;
addError(
"Could not create an FruitShell", oops);
- throw new ActionException(ActionException.SKIP_CHILDREN, oops);
+ throw new ActionException(SkipCode.SKIP_CHILDREN, oops);
}
}
1
0

18 Aug '08
configuration file not found
----------------------------
Key: LBCLASSIC-65
URL: http://jira.qos.ch/browse/LBCLASSIC-65
Project: logback-classic
Issue Type: Sub-task
Components: joran
Reporter: Ceki Gulcu
Assignee: Ceki Gulcu
Fix For: 0.9.10
Status data should contain information about the paths searched and whether logback-text.xml or logback.xml were found.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.qos.ch/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
1
2

svn commit: r1760 - in logback/trunk: logback-core/src/main/java/ch/qos/logback/core/util logback-examples/src/main/java/chapter3
by noreply.ceki@qos.ch 16 Aug '08
by noreply.ceki@qos.ch 16 Aug '08
16 Aug '08
Author: ceki
Date: Sat Aug 16 19:33:13 2008
New Revision: 1760
Modified:
logback/trunk/logback-core/src/main/java/ch/qos/logback/core/util/StatusPrinter.java
logback/trunk/logback-examples/src/main/java/chapter3/MyApp2.java
Log:
- very minor changes
Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/util/StatusPrinter.java
==============================================================================
--- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/util/StatusPrinter.java (original)
+++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/util/StatusPrinter.java Sat Aug 16 19:33:13 2008
@@ -92,7 +92,7 @@
String dateStr = simpleDateFormat.format(date);
sb.append(dateStr).append(" ");
}
- sb.append(prefix + s).append(Layout.LINE_SEP);
+ sb.append(prefix).append(s).append(Layout.LINE_SEP);
if (s.getThrowable() != null) {
appendThrowable(sb, s.getThrowable());
Modified: logback/trunk/logback-examples/src/main/java/chapter3/MyApp2.java
==============================================================================
--- logback/trunk/logback-examples/src/main/java/chapter3/MyApp2.java (original)
+++ logback/trunk/logback-examples/src/main/java/chapter3/MyApp2.java Sat Aug 16 19:33:13 2008
@@ -20,12 +20,11 @@
final static Logger logger = LoggerFactory.getLogger(MyApp2.class);
public static void main(String[] args) {
- logger.info("Entering application.");
-
// print logback's internal status
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
StatusPrinter.print(lc);
+ logger.info("Entering application.");
Foo foo = new Foo();
foo.doIt();
logger.info("Exiting application.");
1
0

svn commit: r1759 - in logback/trunk/logback-site/src/site/pages: css ghighlighter ghighlighter/Styles ghighlighter/Uncompressed ghighlighter/js manual
by noreply.ceki@qos.ch 16 Aug '08
by noreply.ceki@qos.ch 16 Aug '08
16 Aug '08
Author: ceki
Date: Sat Aug 16 19:32:40 2008
New Revision: 1759
Added:
logback/trunk/logback-site/src/site/pages/ghighlighter/
logback/trunk/logback-site/src/site/pages/ghighlighter/Styles/
logback/trunk/logback-site/src/site/pages/ghighlighter/Styles/SyntaxHighlighter.css
logback/trunk/logback-site/src/site/pages/ghighlighter/Uncompressed/
logback/trunk/logback-site/src/site/pages/ghighlighter/Uncompressed/shBrushCSharp.js
logback/trunk/logback-site/src/site/pages/ghighlighter/Uncompressed/shBrushCpp.js
logback/trunk/logback-site/src/site/pages/ghighlighter/Uncompressed/shBrushCss.js
logback/trunk/logback-site/src/site/pages/ghighlighter/Uncompressed/shBrushDelphi.js
logback/trunk/logback-site/src/site/pages/ghighlighter/Uncompressed/shBrushJScript.js
logback/trunk/logback-site/src/site/pages/ghighlighter/Uncompressed/shBrushJava.js
logback/trunk/logback-site/src/site/pages/ghighlighter/Uncompressed/shBrushPhp.js
logback/trunk/logback-site/src/site/pages/ghighlighter/Uncompressed/shBrushPython.js
logback/trunk/logback-site/src/site/pages/ghighlighter/Uncompressed/shBrushRuby.js
logback/trunk/logback-site/src/site/pages/ghighlighter/Uncompressed/shBrushSql.js
logback/trunk/logback-site/src/site/pages/ghighlighter/Uncompressed/shBrushVb.js
logback/trunk/logback-site/src/site/pages/ghighlighter/Uncompressed/shBrushXml.js
logback/trunk/logback-site/src/site/pages/ghighlighter/Uncompressed/shCore.js
logback/trunk/logback-site/src/site/pages/ghighlighter/js/
logback/trunk/logback-site/src/site/pages/ghighlighter/js/clipboard.swf (contents, props changed)
logback/trunk/logback-site/src/site/pages/ghighlighter/js/shBrushCSharp.js
logback/trunk/logback-site/src/site/pages/ghighlighter/js/shBrushCpp.js
logback/trunk/logback-site/src/site/pages/ghighlighter/js/shBrushCss.js
logback/trunk/logback-site/src/site/pages/ghighlighter/js/shBrushDelphi.js
logback/trunk/logback-site/src/site/pages/ghighlighter/js/shBrushJScript.js
logback/trunk/logback-site/src/site/pages/ghighlighter/js/shBrushJava.js
logback/trunk/logback-site/src/site/pages/ghighlighter/js/shBrushPhp.js
logback/trunk/logback-site/src/site/pages/ghighlighter/js/shBrushPython.js
logback/trunk/logback-site/src/site/pages/ghighlighter/js/shBrushRuby.js
logback/trunk/logback-site/src/site/pages/ghighlighter/js/shBrushSql.js
logback/trunk/logback-site/src/site/pages/ghighlighter/js/shBrushVb.js
logback/trunk/logback-site/src/site/pages/ghighlighter/js/shBrushXml.js
logback/trunk/logback-site/src/site/pages/ghighlighter/js/shCore.js
Modified:
logback/trunk/logback-site/src/site/pages/css/site.css
logback/trunk/logback-site/src/site/pages/manual/joran.html
Log:
- use google highlighter for better Java code rendering in the docs
Modified: logback/trunk/logback-site/src/site/pages/css/site.css
==============================================================================
--- logback/trunk/logback-site/src/site/pages/css/site.css (original)
+++ logback/trunk/logback-site/src/site/pages/css/site.css Sat Aug 16 19:32:40 2008
@@ -283,6 +283,10 @@
font-family: Courier, monospace;
}
+.attr {
+ font-family: Courier, monospace;
+ font-style:italic;
+}
.option {
border: 1px solid black;
Added: logback/trunk/logback-site/src/site/pages/ghighlighter/Styles/SyntaxHighlighter.css
==============================================================================
--- (empty file)
+++ logback/trunk/logback-site/src/site/pages/ghighlighter/Styles/SyntaxHighlighter.css Sat Aug 16 19:32:40 2008
@@ -0,0 +1,185 @@
+.dp-highlighter
+{
+ font-family: "Consolas", "Courier New", Courier, mono, serif;
+ font-size: 12px;
+ background-color: #E7E5DC;
+ width: 99%;
+ overflow: auto;
+ margin: 18px 0 18px 0 !important;
+ padding-top: 1px; /* adds a little border on top when controls are hidden */
+}
+
+/* clear styles */
+.dp-highlighter ol,
+.dp-highlighter ol li,
+.dp-highlighter ol li span
+{
+ margin: 0;
+ padding: 0;
+ border: none;
+}
+
+.dp-highlighter a,
+.dp-highlighter a:hover
+{
+ background: none;
+ border: none;
+ padding: 0;
+ margin: 0;
+}
+
+.dp-highlighter .bar
+{
+ padding-left: 45px;
+}
+
+.dp-highlighter.collapsed .bar,
+.dp-highlighter.nogutter .bar
+{
+ padding-left: 0px;
+}
+
+.dp-highlighter ol
+{
+ list-style: decimal; /* for ie */
+ background-color: #fff;
+ margin: 0px 0px 1px 45px !important; /* 1px bottom margin seems to fix occasional Firefox scrolling */
+ padding: 0px;
+ color: #5C5C5C;
+}
+
+.dp-highlighter.nogutter ol,
+.dp-highlighter.nogutter ol li
+{
+ list-style: none !important;
+ margin-left: 0px !important;
+}
+
+.dp-highlighter ol li,
+.dp-highlighter .columns div
+{
+ list-style: decimal-leading-zero; /* better look for others, override cascade from OL */
+ list-style-position: outside !important;
+ border-left: 3px solid #6CE26C;
+ background-color: #F8F8F8;
+ color: #5C5C5C;
+ padding: 0 3px 0 10px !important;
+ margin: 0 !important;
+ line-height: 14px;
+}
+
+.dp-highlighter.nogutter ol li,
+.dp-highlighter.nogutter .columns div
+{
+ border: 0;
+}
+
+.dp-highlighter .columns
+{
+ background-color: #F8F8F8;
+ color: gray;
+ overflow: hidden;
+ width: 100%;
+}
+
+.dp-highlighter .columns div
+{
+ padding-bottom: 5px;
+}
+
+.dp-highlighter ol li.alt
+{
+ background-color: #FFF;
+ color: inherit;
+}
+
+.dp-highlighter ol li span
+{
+ color: black;
+ background-color: inherit;
+}
+
+/* Adjust some properties when collapsed */
+
+.dp-highlighter.collapsed ol
+{
+ margin: 0px;
+}
+
+.dp-highlighter.collapsed ol li
+{
+ display: none;
+}
+
+/* Additional modifications when in print-view */
+
+.dp-highlighter.printing
+{
+ border: none;
+}
+
+.dp-highlighter.printing .tools
+{
+ display: none !important;
+}
+
+.dp-highlighter.printing li
+{
+ display: list-item !important;
+}
+
+/* Styles for the tools */
+
+.dp-highlighter .tools
+{
+ padding: 3px 8px 3px 10px;
+ font: 9px Verdana, Geneva, Arial, Helvetica, sans-serif;
+ color: silver;
+ background-color: #f8f8f8;
+ padding-bottom: 10px;
+ border-left: 3px solid #6CE26C;
+}
+
+.dp-highlighter.nogutter .tools
+{
+ border-left: 0;
+}
+
+.dp-highlighter.collapsed .tools
+{
+ border-bottom: 0;
+}
+
+.dp-highlighter .tools a
+{
+ font-size: 9px;
+ color: #a0a0a0;
+ background-color: inherit;
+ text-decoration: none;
+ margin-right: 10px;
+}
+
+.dp-highlighter .tools a:hover
+{
+ color: red;
+ background-color: inherit;
+ text-decoration: underline;
+}
+
+/* About dialog styles */
+
+.dp-about { background-color: #fff; color: #333; margin: 0px; padding: 0px; }
+.dp-about table { width: 100%; height: 100%; font-size: 11px; font-family: Tahoma, Verdana, Arial, sans-serif !important; }
+.dp-about td { padding: 10px; vertical-align: top; }
+.dp-about .copy { border-bottom: 1px solid #ACA899; height: 95%; }
+.dp-about .title { color: red; background-color: inherit; font-weight: bold; }
+.dp-about .para { margin: 0 0 4px 0; }
+.dp-about .footer { background-color: #ECEADB; color: #333; border-top: 1px solid #fff; text-align: right; }
+.dp-about .close { font-size: 11px; font-family: Tahoma, Verdana, Arial, sans-serif !important; background-color: #ECEADB; color: #333; width: 60px; height: 22px; }
+
+/* Language specific styles */
+
+.dp-highlighter .comment, .dp-highlighter .comments { color: #008200; background-color: inherit; }
+.dp-highlighter .string { color: blue; background-color: inherit; }
+.dp-highlighter .keyword { color: #069; font-weight: bold; background-color: inherit; }
+.dp-highlighter .preprocessor { color: gray; background-color: inherit; }
Added: logback/trunk/logback-site/src/site/pages/ghighlighter/Uncompressed/shBrushCSharp.js
==============================================================================
--- (empty file)
+++ logback/trunk/logback-site/src/site/pages/ghighlighter/Uncompressed/shBrushCSharp.js Sat Aug 16 19:32:40 2008
@@ -0,0 +1,32 @@
+dp.sh.Brushes.CSharp = function()
+{
+ var keywords = 'abstract as base bool break byte case catch char checked class const ' +
+ 'continue decimal default delegate do double else enum event explicit ' +
+ 'extern false finally fixed float for foreach get goto if implicit in int ' +
+ 'interface internal is lock long namespace new null object operator out ' +
+ 'override params private protected public readonly ref return sbyte sealed set ' +
+ 'short sizeof stackalloc static string struct switch this throw true try ' +
+ 'typeof uint ulong unchecked unsafe ushort using virtual void while';
+
+ this.regexList = [
+ // There's a slight problem with matching single line comments and figuring out
+ // a difference between // and ///. Using lookahead and lookbehind solves the
+ // problem, unfortunately JavaScript doesn't support lookbehind. So I'm at a
+ // loss how to translate that regular expression to JavaScript compatible one.
+// { regex: new RegExp('(?<!/)//(?!/).*$|(?<!/)////(?!/).*$|/\\*[^\\*]*(.)*?\\*/', 'gm'), css: 'comment' }, // one line comments starting with anything BUT '///' and multiline comments
+// { regex: new RegExp('(?<!/)///(?!/).*$', 'gm'), css: 'comments' }, // XML comments starting with ///
+
+ { regex: dp.sh.RegexLib.SingleLineCComments, css: 'comment' }, // one line comments
+ { regex: dp.sh.RegexLib.MultiLineCComments, css: 'comment' }, // multiline comments
+ { regex: dp.sh.RegexLib.DoubleQuotedString, css: 'string' }, // strings
+ { regex: dp.sh.RegexLib.SingleQuotedString, css: 'string' }, // strings
+ { regex: new RegExp('^\\s*#.*', 'gm'), css: 'preprocessor' }, // preprocessor tags like #region and #endregion
+ { regex: new RegExp(this.GetKeywords(keywords), 'gm'), css: 'keyword' } // c# keyword
+ ];
+
+ this.CssClass = 'dp-c';
+ this.Style = '.dp-c .vars { color: #d00; }';
+}
+
+dp.sh.Brushes.CSharp.prototype = new dp.sh.Highlighter();
+dp.sh.Brushes.CSharp.Aliases = ['c#', 'c-sharp', 'csharp'];
Added: logback/trunk/logback-site/src/site/pages/ghighlighter/Uncompressed/shBrushCpp.js
==============================================================================
--- (empty file)
+++ logback/trunk/logback-site/src/site/pages/ghighlighter/Uncompressed/shBrushCpp.js Sat Aug 16 19:32:40 2008
@@ -0,0 +1,73 @@
+/**
+ * Code Syntax Highlighter for C++(Windows Platform).
+ * Version 0.0.2
+ * Copyright (C) 2006 Shin, YoungJin.
+ * http://www.jiniya.net/lecture/techbox/test.html
+ *
+ * This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General
+ * Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option)
+ * any later version.
+ *
+ * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
+ * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to
+ * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+dp.sh.Brushes.Cpp = function()
+{
+ var datatypes =
+ 'ATOM BOOL BOOLEAN BYTE CHAR COLORREF DWORD DWORDLONG DWORD_PTR ' +
+ 'DWORD32 DWORD64 FLOAT HACCEL HALF_PTR HANDLE HBITMAP HBRUSH ' +
+ 'HCOLORSPACE HCONV HCONVLIST HCURSOR HDC HDDEDATA HDESK HDROP HDWP ' +
+ 'HENHMETAFILE HFILE HFONT HGDIOBJ HGLOBAL HHOOK HICON HINSTANCE HKEY ' +
+ 'HKL HLOCAL HMENU HMETAFILE HMODULE HMONITOR HPALETTE HPEN HRESULT ' +
+ 'HRGN HRSRC HSZ HWINSTA HWND INT INT_PTR INT32 INT64 LANGID LCID LCTYPE ' +
+ 'LGRPID LONG LONGLONG LONG_PTR LONG32 LONG64 LPARAM LPBOOL LPBYTE LPCOLORREF ' +
+ 'LPCSTR LPCTSTR LPCVOID LPCWSTR LPDWORD LPHANDLE LPINT LPLONG LPSTR LPTSTR ' +
+ 'LPVOID LPWORD LPWSTR LRESULT PBOOL PBOOLEAN PBYTE PCHAR PCSTR PCTSTR PCWSTR ' +
+ 'PDWORDLONG PDWORD_PTR PDWORD32 PDWORD64 PFLOAT PHALF_PTR PHANDLE PHKEY PINT ' +
+ 'PINT_PTR PINT32 PINT64 PLCID PLONG PLONGLONG PLONG_PTR PLONG32 PLONG64 POINTER_32 ' +
+ 'POINTER_64 PSHORT PSIZE_T PSSIZE_T PSTR PTBYTE PTCHAR PTSTR PUCHAR PUHALF_PTR ' +
+ 'PUINT PUINT_PTR PUINT32 PUINT64 PULONG PULONGLONG PULONG_PTR PULONG32 PULONG64 ' +
+ 'PUSHORT PVOID PWCHAR PWORD PWSTR SC_HANDLE SC_LOCK SERVICE_STATUS_HANDLE SHORT ' +
+ 'SIZE_T SSIZE_T TBYTE TCHAR UCHAR UHALF_PTR UINT UINT_PTR UINT32 UINT64 ULONG ' +
+ 'ULONGLONG ULONG_PTR ULONG32 ULONG64 USHORT USN VOID WCHAR WORD WPARAM WPARAM WPARAM ' +
+ 'char bool short int __int32 __int64 __int8 __int16 long float double __wchar_t ' +
+ 'clock_t _complex _dev_t _diskfree_t div_t ldiv_t _exception _EXCEPTION_POINTERS ' +
+ 'FILE _finddata_t _finddatai64_t _wfinddata_t _wfinddatai64_t __finddata64_t ' +
+ '__wfinddata64_t _FPIEEE_RECORD fpos_t _HEAPINFO _HFILE lconv intptr_t ' +
+ 'jmp_buf mbstate_t _off_t _onexit_t _PNH ptrdiff_t _purecall_handler ' +
+ 'sig_atomic_t size_t _stat __stat64 _stati64 terminate_function ' +
+ 'time_t __time64_t _timeb __timeb64 tm uintptr_t _utimbuf ' +
+ 'va_list wchar_t wctrans_t wctype_t wint_t signed';
+
+ var keywords =
+ 'break case catch class const __finally __exception __try ' +
+ 'const_cast continue private public protected __declspec ' +
+ 'default delete deprecated dllexport dllimport do dynamic_cast ' +
+ 'else enum explicit extern if for friend goto inline ' +
+ 'mutable naked namespace new noinline noreturn nothrow ' +
+ 'register reinterpret_cast return selectany ' +
+ 'sizeof static static_cast struct switch template this ' +
+ 'thread throw true false try typedef typeid typename union ' +
+ 'using uuid virtual void volatile whcar_t while';
+
+ this.regexList = [
+ { regex: dp.sh.RegexLib.SingleLineCComments, css: 'comment' }, // one line comments
+ { regex: dp.sh.RegexLib.MultiLineCComments, css: 'comment' }, // multiline comments
+ { regex: dp.sh.RegexLib.DoubleQuotedString, css: 'string' }, // strings
+ { regex: dp.sh.RegexLib.SingleQuotedString, css: 'string' }, // strings
+ { regex: new RegExp('^ *#.*', 'gm'), css: 'preprocessor' },
+ { regex: new RegExp(this.GetKeywords(datatypes), 'gm'), css: 'datatypes' },
+ { regex: new RegExp(this.GetKeywords(keywords), 'gm'), css: 'keyword' }
+ ];
+
+ this.CssClass = 'dp-cpp';
+ this.Style = '.dp-cpp .datatypes { color: #2E8B57; font-weight: bold; }';
+}
+
+dp.sh.Brushes.Cpp.prototype = new dp.sh.Highlighter();
+dp.sh.Brushes.Cpp.Aliases = ['cpp', 'c', 'c++'];
Added: logback/trunk/logback-site/src/site/pages/ghighlighter/Uncompressed/shBrushCss.js
==============================================================================
--- (empty file)
+++ logback/trunk/logback-site/src/site/pages/ghighlighter/Uncompressed/shBrushCss.js Sat Aug 16 19:32:40 2008
@@ -0,0 +1,64 @@
+dp.sh.Brushes.CSS = function()
+{
+ var keywords = 'ascent azimuth background-attachment background-color background-image background-position ' +
+ 'background-repeat background baseline bbox border-collapse border-color border-spacing border-style border-top ' +
+ 'border-right border-bottom border-left border-top-color border-right-color border-bottom-color border-left-color ' +
+ 'border-top-style border-right-style border-bottom-style border-left-style border-top-width border-right-width ' +
+ 'border-bottom-width border-left-width border-width border cap-height caption-side centerline clear clip color ' +
+ 'content counter-increment counter-reset cue-after cue-before cue cursor definition-src descent direction display ' +
+ 'elevation empty-cells float font-size-adjust font-family font-size font-stretch font-style font-variant font-weight font ' +
+ 'height letter-spacing line-height list-style-image list-style-position list-style-type list-style margin-top ' +
+ 'margin-right margin-bottom margin-left margin marker-offset marks mathline max-height max-width min-height min-width orphans ' +
+ 'outline-color outline-style outline-width outline overflow padding-top padding-right padding-bottom padding-left padding page ' +
+ 'page-break-after page-break-before page-break-inside pause pause-after pause-before pitch pitch-range play-during position ' +
+ 'quotes richness size slope src speak-header speak-numeral speak-punctuation speak speech-rate stemh stemv stress ' +
+ 'table-layout text-align text-decoration text-indent text-shadow text-transform unicode-bidi unicode-range units-per-em ' +
+ 'vertical-align visibility voice-family volume white-space widows width widths word-spacing x-height z-index';
+
+ var values = 'above absolute all always aqua armenian attr aural auto avoid baseline behind below bidi-override black blink block blue bold bolder '+
+ 'both bottom braille capitalize caption center center-left center-right circle close-quote code collapse compact condensed '+
+ 'continuous counter counters crop cross crosshair cursive dashed decimal decimal-leading-zero default digits disc dotted double '+
+ 'embed embossed e-resize expanded extra-condensed extra-expanded fantasy far-left far-right fast faster fixed format fuchsia '+
+ 'gray green groove handheld hebrew help hidden hide high higher icon inline-table inline inset inside invert italic '+
+ 'justify landscape large larger left-side left leftwards level lighter lime line-through list-item local loud lower-alpha '+
+ 'lowercase lower-greek lower-latin lower-roman lower low ltr marker maroon medium message-box middle mix move narrower '+
+ 'navy ne-resize no-close-quote none no-open-quote no-repeat normal nowrap n-resize nw-resize oblique olive once open-quote outset '+
+ 'outside overline pointer portrait pre print projection purple red relative repeat repeat-x repeat-y rgb ridge right right-side '+
+ 'rightwards rtl run-in screen scroll semi-condensed semi-expanded separate se-resize show silent silver slower slow '+
+ 'small small-caps small-caption smaller soft solid speech spell-out square s-resize static status-bar sub super sw-resize '+
+ 'table-caption table-cell table-column table-column-group table-footer-group table-header-group table-row table-row-group teal '+
+ 'text-bottom text-top thick thin top transparent tty tv ultra-condensed ultra-expanded underline upper-alpha uppercase upper-latin '+
+ 'upper-roman url visible wait white wider w-resize x-fast x-high x-large x-loud x-low x-slow x-small x-soft xx-large xx-small yellow';
+
+ var fonts = '[mM]onospace [tT]ahoma [vV]erdana [aA]rial [hH]elvetica [sS]ans-serif [sS]erif';
+
+ this.regexList = [
+ { regex: dp.sh.RegexLib.MultiLineCComments, css: 'comment' }, // multiline comments
+ { regex: dp.sh.RegexLib.DoubleQuotedString, css: 'string' }, // double quoted strings
+ { regex: dp.sh.RegexLib.SingleQuotedString, css: 'string' }, // single quoted strings
+ { regex: new RegExp('\\#[a-zA-Z0-9]{3,6}', 'g'), css: 'value' }, // html colors
+ { regex: new RegExp('(-?\\d+)(\.\\d+)?(px|em|pt|\:|\%|)', 'g'), css: 'value' }, // sizes
+ { regex: new RegExp('!important', 'g'), css: 'important' }, // !important
+ { regex: new RegExp(this.GetKeywordsCSS(keywords), 'gm'), css: 'keyword' }, // keywords
+ { regex: new RegExp(this.GetValuesCSS(values), 'g'), css: 'value' }, // values
+ { regex: new RegExp(this.GetValuesCSS(fonts), 'g'), css: 'value' } // fonts
+ ];
+
+ this.CssClass = 'dp-css';
+ this.Style = '.dp-css .value { color: black; }' +
+ '.dp-css .important { color: red; }'
+ ;
+}
+
+dp.sh.Highlighter.prototype.GetKeywordsCSS = function(str)
+{
+ return '\\b([a-z_]|)' + str.replace(/ /g, '(?=:)\\b|\\b([a-z_\\*]|\\*|)') + '(?=:)\\b';
+}
+
+dp.sh.Highlighter.prototype.GetValuesCSS = function(str)
+{
+ return '\\b' + str.replace(/ /g, '(?!-)(?!:)\\b|\\b()') + '\:\\b';
+}
+
+dp.sh.Brushes.CSS.prototype = new dp.sh.Highlighter();
+dp.sh.Brushes.CSS.Aliases = ['css'];
Added: logback/trunk/logback-site/src/site/pages/ghighlighter/Uncompressed/shBrushDelphi.js
==============================================================================
--- (empty file)
+++ logback/trunk/logback-site/src/site/pages/ghighlighter/Uncompressed/shBrushDelphi.js Sat Aug 16 19:32:40 2008
@@ -0,0 +1,34 @@
+/* Delphi brush is contributed by Eddie Shipman */
+dp.sh.Brushes.Delphi = function()
+{
+ var keywords = 'abs addr and ansichar ansistring array as asm begin boolean byte cardinal ' +
+ 'case char class comp const constructor currency destructor div do double ' +
+ 'downto else end except exports extended false file finalization finally ' +
+ 'for function goto if implementation in inherited int64 initialization ' +
+ 'integer interface is label library longint longword mod nil not object ' +
+ 'of on or packed pansichar pansistring pchar pcurrency pdatetime pextended ' +
+ 'pint64 pointer private procedure program property pshortstring pstring ' +
+ 'pvariant pwidechar pwidestring protected public published raise real real48 ' +
+ 'record repeat set shl shortint shortstring shr single smallint string then ' +
+ 'threadvar to true try type unit until uses val var varirnt while widechar ' +
+ 'widestring with word write writeln xor';
+
+ this.regexList = [
+ { regex: new RegExp('\\(\\*[\\s\\S]*?\\*\\)', 'gm'), css: 'comment' }, // multiline comments (* *)
+ { regex: new RegExp('{(?!\\$)[\\s\\S]*?}', 'gm'), css: 'comment' }, // multiline comments { }
+ { regex: dp.sh.RegexLib.SingleLineCComments, css: 'comment' }, // one line
+ { regex: dp.sh.RegexLib.SingleQuotedString, css: 'string' }, // strings
+ { regex: new RegExp('\\{\\$[a-zA-Z]+ .+\\}', 'g'), css: 'directive' }, // Compiler Directives and Region tags
+ { regex: new RegExp('\\b[\\d\\.]+\\b', 'g'), css: 'number' }, // numbers 12345
+ { regex: new RegExp('\\$[a-zA-Z0-9]+\\b', 'g'), css: 'number' }, // numbers $F5D3
+ { regex: new RegExp(this.GetKeywords(keywords), 'gm'), css: 'keyword' } // keyword
+ ];
+
+ this.CssClass = 'dp-delphi';
+ this.Style = '.dp-delphi .number { color: blue; }' +
+ '.dp-delphi .directive { color: #008284; }' +
+ '.dp-delphi .vars { color: #000; }';
+}
+
+dp.sh.Brushes.Delphi.prototype = new dp.sh.Highlighter();
+dp.sh.Brushes.Delphi.Aliases = ['delphi', 'pascal'];
Added: logback/trunk/logback-site/src/site/pages/ghighlighter/Uncompressed/shBrushJScript.js
==============================================================================
--- (empty file)
+++ logback/trunk/logback-site/src/site/pages/ghighlighter/Uncompressed/shBrushJScript.js Sat Aug 16 19:32:40 2008
@@ -0,0 +1,22 @@
+dp.sh.Brushes.JScript = function()
+{
+ var keywords = 'abstract boolean break byte case catch char class const continue debugger ' +
+ 'default delete do double else enum export extends false final finally float ' +
+ 'for function goto if implements import in instanceof int interface long native ' +
+ 'new null package private protected public return short static super switch ' +
+ 'synchronized this throw throws transient true try typeof var void volatile while with';
+
+ this.regexList = [
+ { regex: dp.sh.RegexLib.SingleLineCComments, css: 'comment' }, // one line comments
+ { regex: dp.sh.RegexLib.MultiLineCComments, css: 'comment' }, // multiline comments
+ { regex: dp.sh.RegexLib.DoubleQuotedString, css: 'string' }, // double quoted strings
+ { regex: dp.sh.RegexLib.SingleQuotedString, css: 'string' }, // single quoted strings
+ { regex: new RegExp('^\\s*#.*', 'gm'), css: 'preprocessor' }, // preprocessor tags like #region and #endregion
+ { regex: new RegExp(this.GetKeywords(keywords), 'gm'), css: 'keyword' } // keywords
+ ];
+
+ this.CssClass = 'dp-c';
+}
+
+dp.sh.Brushes.JScript.prototype = new dp.sh.Highlighter();
+dp.sh.Brushes.JScript.Aliases = ['js', 'jscript', 'javascript'];
Added: logback/trunk/logback-site/src/site/pages/ghighlighter/Uncompressed/shBrushJava.js
==============================================================================
--- (empty file)
+++ logback/trunk/logback-site/src/site/pages/ghighlighter/Uncompressed/shBrushJava.js Sat Aug 16 19:32:40 2008
@@ -0,0 +1,28 @@
+dp.sh.Brushes.Java = function()
+{
+ var keywords = 'abstract assert boolean break byte case catch char class const ' +
+ 'continue default do double else enum extends ' +
+ 'false final finally float for goto if implements import ' +
+ 'instanceof int interface long native new null ' +
+ 'package private protected public return ' +
+ 'short static strictfp super switch synchronized this throw throws true ' +
+ 'transient try void volatile while';
+
+ this.regexList = [
+ { regex: dp.sh.RegexLib.SingleLineCComments, css: 'comment' }, // one line comments
+ { regex: dp.sh.RegexLib.MultiLineCComments, css: 'comment' }, // multiline comments
+ { regex: dp.sh.RegexLib.DoubleQuotedString, css: 'string' }, // strings
+ { regex: dp.sh.RegexLib.SingleQuotedString, css: 'string' }, // strings
+ { regex: new RegExp('\\b([\\d]+(\\.[\\d]+)?|0x[a-f0-9]+)\\b', 'gi'), css: 'number' }, // numbers
+ { regex: new RegExp('(?!\\@interface\\b)\\@[\\$\\w]+\\b', 'g'), css: 'annotation' }, // annotation @anno
+ { regex: new RegExp('\\@interface\\b', 'g'), css: 'keyword' }, // @interface keyword
+ { regex: new RegExp(this.GetKeywords(keywords), 'gm'), css: 'keyword' } // java keyword
+ ];
+
+ this.CssClass = 'dp-j';
+ this.Style = '.dp-j .annotation { color: #646464; }' +
+ '.dp-j .number { color: #C00000; }';
+}
+
+dp.sh.Brushes.Java.prototype = new dp.sh.Highlighter();
+dp.sh.Brushes.Java.Aliases = ['java'];
Added: logback/trunk/logback-site/src/site/pages/ghighlighter/Uncompressed/shBrushPhp.js
==============================================================================
--- (empty file)
+++ logback/trunk/logback-site/src/site/pages/ghighlighter/Uncompressed/shBrushPhp.js Sat Aug 16 19:32:40 2008
@@ -0,0 +1,60 @@
+dp.sh.Brushes.Php = function()
+{
+ var funcs = 'abs acos acosh addcslashes addslashes ' +
+ 'array_change_key_case array_chunk array_combine array_count_values array_diff '+
+ 'array_diff_assoc array_diff_key array_diff_uassoc array_diff_ukey array_fill '+
+ 'array_filter array_flip array_intersect array_intersect_assoc array_intersect_key '+
+ 'array_intersect_uassoc array_intersect_ukey array_key_exists array_keys array_map '+
+ 'array_merge array_merge_recursive array_multisort array_pad array_pop array_product '+
+ 'array_push array_rand array_reduce array_reverse array_search array_shift '+
+ 'array_slice array_splice array_sum array_udiff array_udiff_assoc '+
+ 'array_udiff_uassoc array_uintersect array_uintersect_assoc '+
+ 'array_uintersect_uassoc array_unique array_unshift array_values array_walk '+
+ 'array_walk_recursive atan atan2 atanh base64_decode base64_encode base_convert '+
+ 'basename bcadd bccomp bcdiv bcmod bcmul bindec bindtextdomain bzclose bzcompress '+
+ 'bzdecompress bzerrno bzerror bzerrstr bzflush bzopen bzread bzwrite ceil chdir '+
+ 'checkdate checkdnsrr chgrp chmod chop chown chr chroot chunk_split class_exists '+
+ 'closedir closelog copy cos cosh count count_chars date decbin dechex decoct '+
+ 'deg2rad delete ebcdic2ascii echo empty end ereg ereg_replace eregi eregi_replace error_log '+
+ 'error_reporting escapeshellarg escapeshellcmd eval exec exit exp explode extension_loaded '+
+ 'feof fflush fgetc fgetcsv fgets fgetss file_exists file_get_contents file_put_contents '+
+ 'fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype '+
+ 'floatval flock floor flush fmod fnmatch fopen fpassthru fprintf fputcsv fputs fread fscanf '+
+ 'fseek fsockopen fstat ftell ftok getallheaders getcwd getdate getenv gethostbyaddr gethostbyname '+
+ 'gethostbynamel getimagesize getlastmod getmxrr getmygid getmyinode getmypid getmyuid getopt '+
+ 'getprotobyname getprotobynumber getrandmax getrusage getservbyname getservbyport gettext '+
+ 'gettimeofday gettype glob gmdate gmmktime ini_alter ini_get ini_get_all ini_restore ini_set '+
+ 'interface_exists intval ip2long is_a is_array is_bool is_callable is_dir is_double '+
+ 'is_executable is_file is_finite is_float is_infinite is_int is_integer is_link is_long '+
+ 'is_nan is_null is_numeric is_object is_readable is_real is_resource is_scalar is_soap_fault '+
+ 'is_string is_subclass_of is_uploaded_file is_writable is_writeable mkdir mktime nl2br '+
+ 'parse_ini_file parse_str parse_url passthru pathinfo readlink realpath rewind rewinddir rmdir '+
+ 'round str_ireplace str_pad str_repeat str_replace str_rot13 str_shuffle str_split '+
+ 'str_word_count strcasecmp strchr strcmp strcoll strcspn strftime strip_tags stripcslashes '+
+ 'stripos stripslashes stristr strlen strnatcasecmp strnatcmp strncasecmp strncmp strpbrk '+
+ 'strpos strptime strrchr strrev strripos strrpos strspn strstr strtok strtolower strtotime '+
+ 'strtoupper strtr strval substr substr_compare';
+
+ var keywords = 'and or xor __FILE__ __LINE__ array as break case ' +
+ 'cfunction class const continue declare default die do else ' +
+ 'elseif empty enddeclare endfor endforeach endif endswitch endwhile ' +
+ 'extends for foreach function include include_once global if ' +
+ 'new old_function return static switch use require require_once ' +
+ 'var while __FUNCTION__ __CLASS__ ' +
+ '__METHOD__ abstract interface public implements extends private protected throw';
+
+ this.regexList = [
+ { regex: dp.sh.RegexLib.SingleLineCComments, css: 'comment' }, // one line comments
+ { regex: dp.sh.RegexLib.MultiLineCComments, css: 'comment' }, // multiline comments
+ { regex: dp.sh.RegexLib.DoubleQuotedString, css: 'string' }, // double quoted strings
+ { regex: dp.sh.RegexLib.SingleQuotedString, css: 'string' }, // single quoted strings
+ { regex: new RegExp('\\$\\w+', 'g'), css: 'vars' }, // variables
+ { regex: new RegExp(this.GetKeywords(funcs), 'gmi'), css: 'func' }, // functions
+ { regex: new RegExp(this.GetKeywords(keywords), 'gm'), css: 'keyword' } // keyword
+ ];
+
+ this.CssClass = 'dp-c';
+}
+
+dp.sh.Brushes.Php.prototype = new dp.sh.Highlighter();
+dp.sh.Brushes.Php.Aliases = ['php'];
Added: logback/trunk/logback-site/src/site/pages/ghighlighter/Uncompressed/shBrushPython.js
==============================================================================
--- (empty file)
+++ logback/trunk/logback-site/src/site/pages/ghighlighter/Uncompressed/shBrushPython.js Sat Aug 16 19:32:40 2008
@@ -0,0 +1,30 @@
+/* Python 2.3 syntax contributed by Gheorghe Milas */
+dp.sh.Brushes.Python = function()
+{
+ var keywords = 'and assert break class continue def del elif else ' +
+ 'except exec finally for from global if import in is ' +
+ 'lambda not or pass print raise return try yield while';
+
+ var special = 'None True False self cls class_'
+
+ this.regexList = [
+ { regex: dp.sh.RegexLib.SingleLinePerlComments, css: 'comment' },
+ { regex: new RegExp("^\\s*@\\w+", 'gm'), css: 'decorator' },
+ { regex: new RegExp("(['\"]{3})([^\\1])*?\\1", 'gm'), css: 'comment' },
+ { regex: new RegExp('"(?!")(?:\\.|\\\\\\"|[^\\""\\n\\r])*"', 'gm'), css: 'string' },
+ { regex: new RegExp("'(?!')*(?:\\.|(\\\\\\')|[^\\''\\n\\r])*'", 'gm'), css: 'string' },
+ { regex: new RegExp("\\b\\d+\\.?\\w*", 'g'), css: 'number' },
+ { regex: new RegExp(this.GetKeywords(keywords), 'gm'), css: 'keyword' },
+ { regex: new RegExp(this.GetKeywords(special), 'gm'), css: 'special' }
+ ];
+
+ this.CssClass = 'dp-py';
+ this.Style = '.dp-py .builtins { color: #ff1493; }' +
+ '.dp-py .magicmethods { color: #808080; }' +
+ '.dp-py .exceptions { color: brown; }' +
+ '.dp-py .types { color: brown; font-style: italic; }' +
+ '.dp-py .commonlibs { color: #8A2BE2; font-style: italic; }';
+}
+
+dp.sh.Brushes.Python.prototype = new dp.sh.Highlighter();
+dp.sh.Brushes.Python.Aliases = ['py', 'python'];
Added: logback/trunk/logback-site/src/site/pages/ghighlighter/Uncompressed/shBrushRuby.js
==============================================================================
--- (empty file)
+++ logback/trunk/logback-site/src/site/pages/ghighlighter/Uncompressed/shBrushRuby.js Sat Aug 16 19:32:40 2008
@@ -0,0 +1,28 @@
+/* Ruby 1.8.4 syntax contributed by Erik Peterson */
+dp.sh.Brushes.Ruby = function()
+{
+ var keywords = 'alias and BEGIN begin break case class def define_method defined do each else elsif ' +
+ 'END end ensure false for if in module new next nil not or raise redo rescue retry return ' +
+ 'self super then throw true undef unless until when while yield';
+
+ var builtins = 'Array Bignum Binding Class Continuation Dir Exception FalseClass File::Stat File Fixnum Fload ' +
+ 'Hash Integer IO MatchData Method Module NilClass Numeric Object Proc Range Regexp String Struct::TMS Symbol ' +
+ 'ThreadGroup Thread Time TrueClass'
+
+ this.regexList = [
+ { regex: dp.sh.RegexLib.SingleLinePerlComments, css: 'comment' }, // one line comments
+ { regex: dp.sh.RegexLib.DoubleQuotedString, css: 'string' }, // double quoted strings
+ { regex: dp.sh.RegexLib.SingleQuotedString, css: 'string' }, // single quoted strings
+ { regex: new RegExp(':[a-z][A-Za-z0-9_]*', 'g'), css: 'symbol' }, // symbols
+ { regex: new RegExp('(\\$|@@|@)\\w+', 'g'), css: 'variable' }, // $global, @instance, and @@class variables
+ { regex: new RegExp(this.GetKeywords(keywords), 'gm'), css: 'keyword' }, // keywords
+ { regex: new RegExp(this.GetKeywords(builtins), 'gm'), css: 'builtin' } // builtins
+ ];
+
+ this.CssClass = 'dp-rb';
+ this.Style = '.dp-rb .symbol { color: #a70; }' +
+ '.dp-rb .variable { color: #a70; font-weight: bold; }';
+}
+
+dp.sh.Brushes.Ruby.prototype = new dp.sh.Highlighter();
+dp.sh.Brushes.Ruby.Aliases = ['ruby', 'rails', 'ror'];
Added: logback/trunk/logback-site/src/site/pages/ghighlighter/Uncompressed/shBrushSql.js
==============================================================================
--- (empty file)
+++ logback/trunk/logback-site/src/site/pages/ghighlighter/Uncompressed/shBrushSql.js Sat Aug 16 19:32:40 2008
@@ -0,0 +1,42 @@
+dp.sh.Brushes.Sql = function()
+{
+ var funcs = 'abs avg case cast coalesce convert count current_timestamp ' +
+ 'current_user day isnull left lower month nullif replace right ' +
+ 'session_user space substring sum system_user upper user year';
+
+ var keywords = 'absolute action add after alter as asc at authorization begin bigint ' +
+ 'binary bit by cascade char character check checkpoint close collate ' +
+ 'column commit committed connect connection constraint contains continue ' +
+ 'create cube current current_date current_time cursor database date ' +
+ 'deallocate dec decimal declare default delete desc distinct double drop ' +
+ 'dynamic else end end-exec escape except exec execute false fetch first ' +
+ 'float for force foreign forward free from full function global goto grant ' +
+ 'group grouping having hour ignore index inner insensitive insert instead ' +
+ 'int integer intersect into is isolation key last level load local max min ' +
+ 'minute modify move name national nchar next no numeric of off on only ' +
+ 'open option order out output partial password precision prepare primary ' +
+ 'prior privileges procedure public read real references relative repeatable ' +
+ 'restrict return returns revoke rollback rollup rows rule schema scroll ' +
+ 'second section select sequence serializable set size smallint static ' +
+ 'statistics table temp temporary then time timestamp to top transaction ' +
+ 'translation trigger true truncate uncommitted union unique update values ' +
+ 'varchar varying view when where with work';
+
+ var operators = 'all and any between cross in join like not null or outer some';
+
+ this.regexList = [
+ { regex: new RegExp('--(.*)$', 'gm'), css: 'comment' }, // one line and multiline comments
+ { regex: dp.sh.RegexLib.DoubleQuotedString, css: 'string' }, // double quoted strings
+ { regex: dp.sh.RegexLib.SingleQuotedString, css: 'string' }, // single quoted strings
+ { regex: new RegExp(this.GetKeywords(funcs), 'gmi'), css: 'func' }, // functions
+ { regex: new RegExp(this.GetKeywords(operators), 'gmi'), css: 'op' }, // operators and such
+ { regex: new RegExp(this.GetKeywords(keywords), 'gmi'), css: 'keyword' } // keyword
+ ];
+
+ this.CssClass = 'dp-sql';
+ this.Style = '.dp-sql .func { color: #ff1493; }' +
+ '.dp-sql .op { color: #808080; }';
+}
+
+dp.sh.Brushes.Sql.prototype = new dp.sh.Highlighter();
+dp.sh.Brushes.Sql.Aliases = ['sql'];
Added: logback/trunk/logback-site/src/site/pages/ghighlighter/Uncompressed/shBrushVb.js
==============================================================================
--- (empty file)
+++ logback/trunk/logback-site/src/site/pages/ghighlighter/Uncompressed/shBrushVb.js Sat Aug 16 19:32:40 2008
@@ -0,0 +1,29 @@
+dp.sh.Brushes.Vb = function()
+{
+ var keywords = 'AddHandler AddressOf AndAlso Alias And Ansi As Assembly Auto ' +
+ 'Boolean ByRef Byte ByVal Call Case Catch CBool CByte CChar CDate ' +
+ 'CDec CDbl Char CInt Class CLng CObj Const CShort CSng CStr CType ' +
+ 'Date Decimal Declare Default Delegate Dim DirectCast Do Double Each ' +
+ 'Else ElseIf End Enum Erase Error Event Exit False Finally For Friend ' +
+ 'Function Get GetType GoSub GoTo Handles If Implements Imports In ' +
+ 'Inherits Integer Interface Is Let Lib Like Long Loop Me Mod Module ' +
+ 'MustInherit MustOverride MyBase MyClass Namespace New Next Not Nothing ' +
+ 'NotInheritable NotOverridable Object On Option Optional Or OrElse ' +
+ 'Overloads Overridable Overrides ParamArray Preserve Private Property ' +
+ 'Protected Public RaiseEvent ReadOnly ReDim REM RemoveHandler Resume ' +
+ 'Return Select Set Shadows Shared Short Single Static Step Stop String ' +
+ 'Structure Sub SyncLock Then Throw To True Try TypeOf Unicode Until ' +
+ 'Variant When While With WithEvents WriteOnly Xor';
+
+ this.regexList = [
+ { regex: new RegExp('\'.*$', 'gm'), css: 'comment' }, // one line comments
+ { regex: dp.sh.RegexLib.DoubleQuotedString, css: 'string' }, // strings
+ { regex: new RegExp('^\\s*#.*', 'gm'), css: 'preprocessor' }, // preprocessor tags like #region and #endregion
+ { regex: new RegExp(this.GetKeywords(keywords), 'gm'), css: 'keyword' } // c# keyword
+ ];
+
+ this.CssClass = 'dp-vb';
+}
+
+dp.sh.Brushes.Vb.prototype = new dp.sh.Highlighter();
+dp.sh.Brushes.Vb.Aliases = ['vb', 'vb.net'];
Added: logback/trunk/logback-site/src/site/pages/ghighlighter/Uncompressed/shBrushXml.js
==============================================================================
--- (empty file)
+++ logback/trunk/logback-site/src/site/pages/ghighlighter/Uncompressed/shBrushXml.js Sat Aug 16 19:32:40 2008
@@ -0,0 +1,70 @@
+dp.sh.Brushes.Xml = function()
+{
+ this.CssClass = 'dp-xml';
+ this.Style = '.dp-xml .cdata { color: #ff1493; }' +
+ '.dp-xml .tag, .dp-xml .tag-name { color: #069; font-weight: bold; }' +
+ '.dp-xml .attribute { color: red; }' +
+ '.dp-xml .attribute-value { color: blue; }';
+}
+
+dp.sh.Brushes.Xml.prototype = new dp.sh.Highlighter();
+dp.sh.Brushes.Xml.Aliases = ['xml', 'xhtml', 'xslt', 'html', 'xhtml'];
+
+dp.sh.Brushes.Xml.prototype.ProcessRegexList = function()
+{
+ function push(array, value)
+ {
+ array[array.length] = value;
+ }
+
+ /* If only there was a way to get index of a group within a match, the whole XML
+ could be matched with the expression looking something like that:
+
+ (<!\[CDATA\[\s*.*\s*\]\]>)
+ | (<!--\s*.*\s*?-->)
+ | (<)*(\w+)*\s*(\w+)\s*=\s*(".*?"|'.*?'|\w+)(/*>)*
+ | (</?)(.*?)(/?>)
+ */
+ var index = 0;
+ var match = null;
+ var regex = null;
+
+ // Match CDATA in the following format <![ ... [ ... ]]>
+ // (\<|<)\!\[[\w\s]*?\[(.|\s)*?\]\](\>|>)
+ this.GetMatches(new RegExp('(\<|<)\\!\\[[\\w\\s]*?\\[(.|\\s)*?\\]\\](\>|>)', 'gm'), 'cdata');
+
+ // Match comments
+ // (\<|<)!--\s*.*?\s*--(\>|>)
+ this.GetMatches(new RegExp('(\<|<)!--\\s*.*?\\s*--(\>|>)', 'gm'), 'comments');
+
+ // Match attributes and their values
+ // (:|\w+)\s*=\s*(".*?"|\'.*?\'|\w+)*
+ regex = new RegExp('([:\\w-\.]+)\\s*=\\s*(".*?"|\'.*?\'|\\w+)*|(\\w+)', 'gm'); // Thanks to Tomi Blinnikka of Yahoo! for fixing namespaces in attributes
+ while((match = regex.exec(this.code)) != null)
+ {
+ if(match[1] == null)
+ {
+ continue;
+ }
+
+ push(this.matches, new dp.sh.Match(match[1], match.index, 'attribute'));
+
+ // if xml is invalid and attribute has no property value, ignore it
+ if(match[2] != undefined)
+ {
+ push(this.matches, new dp.sh.Match(match[2], match.index + match[0].indexOf(match[2]), 'attribute-value'));
+ }
+ }
+
+ // Match opening and closing tag brackets
+ // (\<|<)/*\?*(?!\!)|/*\?*(\>|>)
+ this.GetMatches(new RegExp('(\<|<)/*\\?*(?!\\!)|/*\\?*(\>|>)', 'gm'), 'tag');
+
+ // Match tag names
+ // (\<|<)/*\?*\s*(\w+)
+ regex = new RegExp('(?:\<|<)/*\\?*\\s*([:\\w-\.]+)', 'gm');
+ while((match = regex.exec(this.code)) != null)
+ {
+ push(this.matches, new dp.sh.Match(match[1], match.index + match[0].indexOf(match[1]), 'tag-name'));
+ }
+}
Added: logback/trunk/logback-site/src/site/pages/ghighlighter/Uncompressed/shCore.js
==============================================================================
--- (empty file)
+++ logback/trunk/logback-site/src/site/pages/ghighlighter/Uncompressed/shCore.js Sat Aug 16 19:32:40 2008
@@ -0,0 +1,705 @@
+/**
+ * Code Syntax Highlighter.
+ * Version 1.5.1
+ * Copyright (C) 2004-2007 Alex Gorbatchev.
+ * http://www.dreamprojections.com/syntaxhighlighter/
+ *
+ * This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General
+ * Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option)
+ * any later version.
+ *
+ * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
+ * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to
+ * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+//
+// create namespaces
+//
+var dp = {
+ sh :
+ {
+ Toolbar : {},
+ Utils : {},
+ RegexLib: {},
+ Brushes : {},
+ Strings : {
+ AboutDialog : '<html><head><title>About...</title></head><body class="dp-about"><table cellspacing="0"><tr><td class="copy"><p class="title">dp.SyntaxHighlighter</div><div class="para">Version: {V}</p><p><a href="http://www.dreamprojections.com/syntaxhighlighter/?ref=about" target="_blank">http://www.dreamprojections.com/syntaxhighlighter</a></p>©2004-2007 Alex Gorbatchev.</td></tr><tr><td class="footer"><input type="button" class="close" value="OK" onClick="window.close()"/></td></tr></table></body></html>'
+ },
+ ClipboardSwf : null,
+ Version : '1.5.1'
+ }
+};
+
+// make an alias
+dp.SyntaxHighlighter = dp.sh;
+
+//
+// Toolbar functions
+//
+
+dp.sh.Toolbar.Commands = {
+ ExpandSource: {
+ label: '+ expand source',
+ check: function(highlighter) { return highlighter.collapse; },
+ func: function(sender, highlighter)
+ {
+ sender.parentNode.removeChild(sender);
+ highlighter.div.className = highlighter.div.className.replace('collapsed', '');
+ }
+ },
+
+ // opens a new windows and puts the original unformatted source code inside.
+ ViewSource: {
+ label: 'view plain',
+ func: function(sender, highlighter)
+ {
+ var code = dp.sh.Utils.FixForBlogger(highlighter.originalCode).replace(/</g, '<');
+ var wnd = window.open('', '_blank', 'width=750, height=400, location=0, resizable=1, menubar=0, scrollbars=0');
+ wnd.document.write('<textarea style="width:99%;height:99%">' + code + '</textarea>');
+ wnd.document.close();
+ }
+ },
+
+ // Copies the original source code in to the clipboard. Uses either IE only method or Flash object if ClipboardSwf is set
+ CopyToClipboard: {
+ label: 'copy to clipboard',
+ check: function() { return window.clipboardData != null || dp.sh.ClipboardSwf != null; },
+ func: function(sender, highlighter)
+ {
+ var code = dp.sh.Utils.FixForBlogger(highlighter.originalCode)
+ .replace(/</g,'<')
+ .replace(/>/g,'>')
+ .replace(/&/g,'&')
+ ;
+
+ if(window.clipboardData)
+ {
+ window.clipboardData.setData('text', code);
+ }
+ else if(dp.sh.ClipboardSwf != null)
+ {
+ var flashcopier = highlighter.flashCopier;
+
+ if(flashcopier == null)
+ {
+ flashcopier = document.createElement('div');
+ highlighter.flashCopier = flashcopier;
+ highlighter.div.appendChild(flashcopier);
+ }
+
+ flashcopier.innerHTML = '<embed src="' + dp.sh.ClipboardSwf + '" FlashVars="clipboard='+encodeURIComponent(code)+'" width="0" height="0" type="application/x-shockwave-flash"></embed>';
+ }
+
+ alert('The code is in your clipboard now');
+ }
+ },
+
+ // creates an invisible iframe, puts the original source code inside and prints it
+ PrintSource: {
+ label: 'print',
+ func: function(sender, highlighter)
+ {
+ var iframe = document.createElement('IFRAME');
+ var doc = null;
+
+ // this hides the iframe
+ iframe.style.cssText = 'position:absolute;width:0px;height:0px;left:-500px;top:-500px;';
+
+ document.body.appendChild(iframe);
+ doc = iframe.contentWindow.document;
+
+ dp.sh.Utils.CopyStyles(doc, window.document);
+ doc.write('<div class="' + highlighter.div.className.replace('collapsed', '') + ' printing">' + highlighter.div.innerHTML + '</div>');
+ doc.close();
+
+ iframe.contentWindow.focus();
+ iframe.contentWindow.print();
+
+ alert('Printing...');
+
+ document.body.removeChild(iframe);
+ }
+ },
+
+ About: {
+ label: '?',
+ func: function(highlighter)
+ {
+ var wnd = window.open('', '_blank', 'dialog,width=300,height=150,scrollbars=0');
+ var doc = wnd.document;
+
+ dp.sh.Utils.CopyStyles(doc, window.document);
+
+ doc.write(dp.sh.Strings.AboutDialog.replace('{V}', dp.sh.Version));
+ doc.close();
+ wnd.focus();
+ }
+ }
+};
+
+// creates a <div /> with all toolbar links
+dp.sh.Toolbar.Create = function(highlighter)
+{
+ var div = document.createElement('DIV');
+
+ div.className = 'tools';
+
+ for(var name in dp.sh.Toolbar.Commands)
+ {
+ var cmd = dp.sh.Toolbar.Commands[name];
+
+ if(cmd.check != null && !cmd.check(highlighter))
+ continue;
+
+ div.innerHTML += '<a href="#" onclick="dp.sh.Toolbar.Command(\'' + name + '\',this);return false;">' + cmd.label + '</a>';
+ }
+
+ return div;
+}
+
+// executes toolbar command by name
+dp.sh.Toolbar.Command = function(name, sender)
+{
+ var n = sender;
+
+ while(n != null && n.className.indexOf('dp-highlighter') == -1)
+ n = n.parentNode;
+
+ if(n != null)
+ dp.sh.Toolbar.Commands[name].func(sender, n.highlighter);
+}
+
+// copies all <link rel="stylesheet" /> from 'target' window to 'dest'
+dp.sh.Utils.CopyStyles = function(destDoc, sourceDoc)
+{
+ var links = sourceDoc.getElementsByTagName('link');
+
+ for(var i = 0; i < links.length; i++)
+ if(links[i].rel.toLowerCase() == 'stylesheet')
+ destDoc.write('<link type="text/css" rel="stylesheet" href="' + links[i].href + '"></link>');
+}
+
+dp.sh.Utils.FixForBlogger = function(str)
+{
+ return (dp.sh.isBloggerMode == true) ? str.replace(/<br\s*\/?>|<br\s*\/?>/gi, '\n') : str;
+}
+
+//
+// Common reusable regular expressions
+//
+dp.sh.RegexLib = {
+ MultiLineCComments : new RegExp('/\\*[\\s\\S]*?\\*/', 'gm'),
+ SingleLineCComments : new RegExp('//.*$', 'gm'),
+ SingleLinePerlComments : new RegExp('#.*$', 'gm'),
+ DoubleQuotedString : new RegExp('"(?:\\.|(\\\\\\")|[^\\""\\n])*"','g'),
+ SingleQuotedString : new RegExp("'(?:\\.|(\\\\\\')|[^\\''\\n])*'", 'g')
+};
+
+//
+// Match object
+//
+dp.sh.Match = function(value, index, css)
+{
+ this.value = value;
+ this.index = index;
+ this.length = value.length;
+ this.css = css;
+}
+
+//
+// Highlighter object
+//
+dp.sh.Highlighter = function()
+{
+ this.noGutter = false;
+ this.addControls = true;
+ this.collapse = false;
+ this.tabsToSpaces = true;
+ this.wrapColumn = 80;
+ this.showColumns = true;
+}
+
+// static callback for the match sorting
+dp.sh.Highlighter.SortCallback = function(m1, m2)
+{
+ // sort matches by index first
+ if(m1.index < m2.index)
+ return -1;
+ else if(m1.index > m2.index)
+ return 1;
+ else
+ {
+ // if index is the same, sort by length
+ if(m1.length < m2.length)
+ return -1;
+ else if(m1.length > m2.length)
+ return 1;
+ }
+ return 0;
+}
+
+dp.sh.Highlighter.prototype.CreateElement = function(name)
+{
+ var result = document.createElement(name);
+ result.highlighter = this;
+ return result;
+}
+
+// gets a list of all matches for a given regular expression
+dp.sh.Highlighter.prototype.GetMatches = function(regex, css)
+{
+ var index = 0;
+ var match = null;
+
+ while((match = regex.exec(this.code)) != null)
+ this.matches[this.matches.length] = new dp.sh.Match(match[0], match.index, css);
+}
+
+dp.sh.Highlighter.prototype.AddBit = function(str, css)
+{
+ if(str == null || str.length == 0)
+ return;
+
+ var span = this.CreateElement('SPAN');
+
+// str = str.replace(/&/g, '&');
+ str = str.replace(/ /g, ' ');
+ str = str.replace(/</g, '<');
+// str = str.replace(/</g, '<');
+// str = str.replace(/>/g, '>');
+ str = str.replace(/\n/gm, ' <br>');
+
+ // when adding a piece of code, check to see if it has line breaks in it
+ // and if it does, wrap individual line breaks with span tags
+ if(css != null)
+ {
+ if((/br/gi).test(str))
+ {
+ var lines = str.split(' <br>');
+
+ for(var i = 0; i < lines.length; i++)
+ {
+ span = this.CreateElement('SPAN');
+ span.className = css;
+ span.innerHTML = lines[i];
+
+ this.div.appendChild(span);
+
+ // don't add a <BR> for the last line
+ if(i + 1 < lines.length)
+ this.div.appendChild(this.CreateElement('BR'));
+ }
+ }
+ else
+ {
+ span.className = css;
+ span.innerHTML = str;
+ this.div.appendChild(span);
+ }
+ }
+ else
+ {
+ span.innerHTML = str;
+ this.div.appendChild(span);
+ }
+}
+
+// checks if one match is inside any other match
+dp.sh.Highlighter.prototype.IsInside = function(match)
+{
+ if(match == null || match.length == 0)
+ return false;
+
+ for(var i = 0; i < this.matches.length; i++)
+ {
+ var c = this.matches[i];
+
+ if(c == null)
+ continue;
+
+ if((match.index > c.index) && (match.index < c.index + c.length))
+ return true;
+ }
+
+ return false;
+}
+
+dp.sh.Highlighter.prototype.ProcessRegexList = function()
+{
+ for(var i = 0; i < this.regexList.length; i++)
+ this.GetMatches(this.regexList[i].regex, this.regexList[i].css);
+}
+
+dp.sh.Highlighter.prototype.ProcessSmartTabs = function(code)
+{
+ var lines = code.split('\n');
+ var result = '';
+ var tabSize = 4;
+ var tab = '\t';
+
+ // This function inserts specified amount of spaces in the string
+ // where a tab is while removing that given tab.
+ function InsertSpaces(line, pos, count)
+ {
+ var left = line.substr(0, pos);
+ var right = line.substr(pos + 1, line.length); // pos + 1 will get rid of the tab
+ var spaces = '';
+
+ for(var i = 0; i < count; i++)
+ spaces += ' ';
+
+ return left + spaces + right;
+ }
+
+ // This function process one line for 'smart tabs'
+ function ProcessLine(line, tabSize)
+ {
+ if(line.indexOf(tab) == -1)
+ return line;
+
+ var pos = 0;
+
+ while((pos = line.indexOf(tab)) != -1)
+ {
+ // This is pretty much all there is to the 'smart tabs' logic.
+ // Based on the position within the line and size of a tab,
+ // calculate the amount of spaces we need to insert.
+ var spaces = tabSize - pos % tabSize;
+
+ line = InsertSpaces(line, pos, spaces);
+ }
+
+ return line;
+ }
+
+ // Go through all the lines and do the 'smart tabs' magic.
+ for(var i = 0; i < lines.length; i++)
+ result += ProcessLine(lines[i], tabSize) + '\n';
+
+ return result;
+}
+
+dp.sh.Highlighter.prototype.SwitchToList = function()
+{
+ // thanks to Lachlan Donald from SitePoint.com for this <br/> tag fix.
+ var html = this.div.innerHTML.replace(/<(br)\/?>/gi, '\n');
+ var lines = html.split('\n');
+
+ if(this.addControls == true)
+ this.bar.appendChild(dp.sh.Toolbar.Create(this));
+
+ // add columns ruler
+ if(this.showColumns)
+ {
+ var div = this.CreateElement('div');
+ var columns = this.CreateElement('div');
+ var showEvery = 10;
+ var i = 1;
+
+ while(i <= 150)
+ {
+ if(i % showEvery == 0)
+ {
+ div.innerHTML += i;
+ i += (i + '').length;
+ }
+ else
+ {
+ div.innerHTML += '·';
+ i++;
+ }
+ }
+
+ columns.className = 'columns';
+ columns.appendChild(div);
+ this.bar.appendChild(columns);
+ }
+
+ for(var i = 0, lineIndex = this.firstLine; i < lines.length - 1; i++, lineIndex++)
+ {
+ var li = this.CreateElement('LI');
+ var span = this.CreateElement('SPAN');
+
+ // uses .line1 and .line2 css styles for alternating lines
+ li.className = (i % 2 == 0) ? 'alt' : '';
+ span.innerHTML = lines[i] + ' ';
+
+ li.appendChild(span);
+ this.ol.appendChild(li);
+ }
+
+ this.div.innerHTML = '';
+}
+
+dp.sh.Highlighter.prototype.Highlight = function(code)
+{
+ function Trim(str)
+ {
+ return str.replace(/^\s*(.*?)[\s\n]*$/g, '$1');
+ }
+
+ function Chop(str)
+ {
+ return str.replace(/\n*$/, '').replace(/^\n*/, '');
+ }
+
+ function Unindent(str)
+ {
+ var lines = dp.sh.Utils.FixForBlogger(str).split('\n');
+ var indents = new Array();
+ var regex = new RegExp('^\\s*', 'g');
+ var min = 1000;
+
+ // go through every line and check for common number of indents
+ for(var i = 0; i < lines.length && min > 0; i++)
+ {
+ if(Trim(lines[i]).length == 0)
+ continue;
+
+ var matches = regex.exec(lines[i]);
+
+ if(matches != null && matches.length > 0)
+ min = Math.min(matches[0].length, min);
+ }
+
+ // trim minimum common number of white space from the begining of every line
+ if(min > 0)
+ for(var i = 0; i < lines.length; i++)
+ lines[i] = lines[i].substr(min);
+
+ return lines.join('\n');
+ }
+
+ // This function returns a portions of the string from pos1 to pos2 inclusive
+ function Copy(string, pos1, pos2)
+ {
+ return string.substr(pos1, pos2 - pos1);
+ }
+
+ var pos = 0;
+
+ if(code == null)
+ code = '';
+
+ this.originalCode = code;
+ this.code = Chop(Unindent(code));
+ this.div = this.CreateElement('DIV');
+ this.bar = this.CreateElement('DIV');
+ this.ol = this.CreateElement('OL');
+ this.matches = new Array();
+
+ this.div.className = 'dp-highlighter';
+ this.div.highlighter = this;
+
+ this.bar.className = 'bar';
+
+ // set the first line
+ this.ol.start = this.firstLine;
+
+ if(this.CssClass != null)
+ this.ol.className = this.CssClass;
+
+ if(this.collapse)
+ this.div.className += ' collapsed';
+
+ if(this.noGutter)
+ this.div.className += ' nogutter';
+
+ // replace tabs with spaces
+ if(this.tabsToSpaces == true)
+ this.code = this.ProcessSmartTabs(this.code);
+
+ this.ProcessRegexList();
+
+ // if no matches found, add entire code as plain text
+ if(this.matches.length == 0)
+ {
+ this.AddBit(this.code, null);
+ this.SwitchToList();
+ this.div.appendChild(this.bar);
+ this.div.appendChild(this.ol);
+ return;
+ }
+
+ // sort the matches
+ this.matches = this.matches.sort(dp.sh.Highlighter.SortCallback);
+
+ // The following loop checks to see if any of the matches are inside
+ // of other matches. This process would get rid of highligted strings
+ // inside comments, keywords inside strings and so on.
+ for(var i = 0; i < this.matches.length; i++)
+ if(this.IsInside(this.matches[i]))
+ this.matches[i] = null;
+
+ // Finally, go through the final list of matches and pull the all
+ // together adding everything in between that isn't a match.
+ for(var i = 0; i < this.matches.length; i++)
+ {
+ var match = this.matches[i];
+
+ if(match == null || match.length == 0)
+ continue;
+
+ this.AddBit(Copy(this.code, pos, match.index), null);
+ this.AddBit(match.value, match.css);
+
+ pos = match.index + match.length;
+ }
+
+ this.AddBit(this.code.substr(pos), null);
+
+ this.SwitchToList();
+ this.div.appendChild(this.bar);
+ this.div.appendChild(this.ol);
+}
+
+dp.sh.Highlighter.prototype.GetKeywords = function(str)
+{
+ return '\\b' + str.replace(/ /g, '\\b|\\b') + '\\b';
+}
+
+dp.sh.BloggerMode = function()
+{
+ dp.sh.isBloggerMode = true;
+}
+
+// highlightes all elements identified by name and gets source code from specified property
+dp.sh.HighlightAll = function(name, showGutter /* optional */, showControls /* optional */, collapseAll /* optional */, firstLine /* optional */, showColumns /* optional */)
+{
+ function FindValue()
+ {
+ var a = arguments;
+
+ for(var i = 0; i < a.length; i++)
+ {
+ if(a[i] == null)
+ continue;
+
+ if(typeof(a[i]) == 'string' && a[i] != '')
+ return a[i] + '';
+
+ if(typeof(a[i]) == 'object' && a[i].value != '')
+ return a[i].value + '';
+ }
+
+ return null;
+ }
+
+ function IsOptionSet(value, list)
+ {
+ for(var i = 0; i < list.length; i++)
+ if(list[i] == value)
+ return true;
+
+ return false;
+ }
+
+ function GetOptionValue(name, list, defaultValue)
+ {
+ var regex = new RegExp('^' + name + '\\[(\\w+)\\]$', 'gi');
+ var matches = null;
+
+ for(var i = 0; i < list.length; i++)
+ if((matches = regex.exec(list[i])) != null)
+ return matches[1];
+
+ return defaultValue;
+ }
+
+ function FindTagsByName(list, name, tagName)
+ {
+ var tags = document.getElementsByTagName(tagName);
+
+ for(var i = 0; i < tags.length; i++)
+ if(tags[i].getAttribute('name') == name)
+ list.push(tags[i]);
+ }
+
+ var elements = [];
+ var highlighter = null;
+ var registered = {};
+ var propertyName = 'innerHTML';
+
+ // for some reason IE doesn't find <pre/> by name, however it does see them just fine by tag name...
+ FindTagsByName(elements, name, 'pre');
+ FindTagsByName(elements, name, 'textarea');
+
+ if(elements.length == 0)
+ return;
+
+ // register all brushes
+ for(var brush in dp.sh.Brushes)
+ {
+ var aliases = dp.sh.Brushes[brush].Aliases;
+
+ if(aliases == null)
+ continue;
+
+ for(var i = 0; i < aliases.length; i++)
+ registered[aliases[i]] = brush;
+ }
+
+ for(var i = 0; i < elements.length; i++)
+ {
+ var element = elements[i];
+ var options = FindValue(
+ element.attributes['class'], element.className,
+ element.attributes['language'], element.language
+ );
+ var language = '';
+
+ if(options == null)
+ continue;
+
+ options = options.split(':');
+
+ language = options[0].toLowerCase();
+
+ if(registered[language] == null)
+ continue;
+
+ // instantiate a brush
+ highlighter = new dp.sh.Brushes[registered[language]]();
+
+ // hide the original element
+ element.style.display = 'none';
+
+ highlighter.noGutter = (showGutter == null) ? IsOptionSet('nogutter', options) : !showGutter;
+ highlighter.addControls = (showControls == null) ? !IsOptionSet('nocontrols', options) : showControls;
+ highlighter.collapse = (collapseAll == null) ? IsOptionSet('collapse', options) : collapseAll;
+ highlighter.showColumns = (showColumns == null) ? IsOptionSet('showcolumns', options) : showColumns;
+
+ // write out custom brush style
+ var headNode = document.getElementsByTagName('head')[0];
+ if(highlighter.Style && headNode)
+ {
+ var styleNode = document.createElement('style');
+ styleNode.setAttribute('type', 'text/css');
+
+ if(styleNode.styleSheet) // for IE
+ {
+ styleNode.styleSheet.cssText = highlighter.Style;
+ }
+ else // for everyone else
+ {
+ var textNode = document.createTextNode(highlighter.Style);
+ styleNode.appendChild(textNode);
+ }
+
+ headNode.appendChild(styleNode);
+ }
+
+ // first line idea comes from Andrew Collington, thanks!
+ highlighter.firstLine = (firstLine == null) ? parseInt(GetOptionValue('firstline', options, 1)) : firstLine;
+
+ highlighter.Highlight(element[propertyName]);
+
+ highlighter.source = element;
+
+ element.parentNode.insertBefore(highlighter.div, element);
+ }
+}
Added: logback/trunk/logback-site/src/site/pages/ghighlighter/js/clipboard.swf
==============================================================================
Binary file. No diff available.
Added: logback/trunk/logback-site/src/site/pages/ghighlighter/js/shBrushCSharp.js
==============================================================================
--- (empty file)
+++ logback/trunk/logback-site/src/site/pages/ghighlighter/js/shBrushCSharp.js Sat Aug 16 19:32:40 2008
@@ -0,0 +1,10 @@
+/*
+ * JsMin
+ * Javascript Compressor
+ * http://www.crockford.com/
+ * http://www.smallsharptools.com/
+*/
+
+dp.sh.Brushes.CSharp=function()
+{var keywords='abstract as base bool break byte case catch char checked class const '+'continue decimal default delegate do double else enum event explicit '+'extern false finally fixed float for foreach get goto if implicit in int '+'interface internal is lock long namespace new null object operator out '+'override params private protected public readonly ref return sbyte sealed set '+'short sizeof stackalloc static string struct switch this throw true try '+'typeof uint ulong unchecked unsafe ushort using virtual void while';this.regexList=[{regex:dp.sh.RegexLib.SingleLineCComments,css:'comment'},{regex:dp.sh.RegexLib.MultiLineCComments,css:'comment'},{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'},{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'},{regex:new RegExp('^\\s*#.*','gm'),css:'preprocessor'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'}];this.CssClass='dp-c';this.Style='.dp-c .vars { color: #d00; }';}
+dp.sh.Brushes.CSharp.prototype=new dp.sh.Highlighter();dp.sh.Brushes.CSharp.Aliases=['c#','c-sharp','csharp'];
Added: logback/trunk/logback-site/src/site/pages/ghighlighter/js/shBrushCpp.js
==============================================================================
--- (empty file)
+++ logback/trunk/logback-site/src/site/pages/ghighlighter/js/shBrushCpp.js Sat Aug 16 19:32:40 2008
@@ -0,0 +1,10 @@
+/*
+ * JsMin
+ * Javascript Compressor
+ * http://www.crockford.com/
+ * http://www.smallsharptools.com/
+*/
+
+dp.sh.Brushes.Cpp=function()
+{var datatypes='ATOM BOOL BOOLEAN BYTE CHAR COLORREF DWORD DWORDLONG DWORD_PTR '+'DWORD32 DWORD64 FLOAT HACCEL HALF_PTR HANDLE HBITMAP HBRUSH '+'HCOLORSPACE HCONV HCONVLIST HCURSOR HDC HDDEDATA HDESK HDROP HDWP '+'HENHMETAFILE HFILE HFONT HGDIOBJ HGLOBAL HHOOK HICON HINSTANCE HKEY '+'HKL HLOCAL HMENU HMETAFILE HMODULE HMONITOR HPALETTE HPEN HRESULT '+'HRGN HRSRC HSZ HWINSTA HWND INT INT_PTR INT32 INT64 LANGID LCID LCTYPE '+'LGRPID LONG LONGLONG LONG_PTR LONG32 LONG64 LPARAM LPBOOL LPBYTE LPCOLORREF '+'LPCSTR LPCTSTR LPCVOID LPCWSTR LPDWORD LPHANDLE LPINT LPLONG LPSTR LPTSTR '+'LPVOID LPWORD LPWSTR LRESULT PBOOL PBOOLEAN PBYTE PCHAR PCSTR PCTSTR PCWSTR '+'PDWORDLONG PDWORD_PTR PDWORD32 PDWORD64 PFLOAT PHALF_PTR PHANDLE PHKEY PINT '+'PINT_PTR PINT32 PINT64 PLCID PLONG PLONGLONG PLONG_PTR PLONG32 PLONG64 POINTER_32 '+'POINTER_64 PSHORT PSIZE_T PSSIZE_T PSTR PTBYTE PTCHAR PTSTR PUCHAR PUHALF_PTR '+'PUINT PUINT_PTR PUINT32 PUINT64 PULONG PULONGLONG PULONG_PTR PULONG32 PULONG64 '+
'PUSHORT PVOID PWCHAR PWORD PWSTR SC_HANDLE SC_LOCK SERVICE_STATUS_HANDLE SHORT '+'SIZE_T SSIZE_T TBYTE TCHAR UCHAR UHALF_PTR UINT UINT_PTR UINT32 UINT64 ULONG '+'ULONGLONG ULONG_PTR ULONG32 ULONG64 USHORT USN VOID WCHAR WORD WPARAM WPARAM WPARAM '+'char bool short int __int32 __int64 __int8 __int16 long float double __wchar_t '+'clock_t _complex _dev_t _diskfree_t div_t ldiv_t _exception _EXCEPTION_POINTERS '+'FILE _finddata_t _finddatai64_t _wfinddata_t _wfinddatai64_t __finddata64_t '+'__wfinddata64_t _FPIEEE_RECORD fpos_t _HEAPINFO _HFILE lconv intptr_t '+'jmp_buf mbstate_t _off_t _onexit_t _PNH ptrdiff_t _purecall_handler '+'sig_atomic_t size_t _stat __stat64 _stati64 terminate_function '+'time_t __time64_t _timeb __timeb64 tm uintptr_t _utimbuf '+'va_list wchar_t wctrans_t wctype_t wint_t signed';var keywords='break case catch class const __finally __exception __try '+'const_cast continue private public protected __declspec '+'default delete deprecated dllexport dllimp
ort do dynamic_cast '+'else enum explicit extern if for friend goto inline '+'mutable naked namespace new noinline noreturn nothrow '+'register reinterpret_cast return selectany '+'sizeof static static_cast struct switch template this '+'thread throw true false try typedef typeid typename union '+'using uuid virtual void volatile whcar_t while';this.regexList=[{regex:dp.sh.RegexLib.SingleLineCComments,css:'comment'},{regex:dp.sh.RegexLib.MultiLineCComments,css:'comment'},{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'},{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'},{regex:new RegExp('^ *#.*','gm'),css:'preprocessor'},{regex:new RegExp(this.GetKeywords(datatypes),'gm'),css:'datatypes'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'}];this.CssClass='dp-cpp';this.Style='.dp-cpp .datatypes { color: #2E8B57; font-weight: bold; }';}
+dp.sh.Brushes.Cpp.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Cpp.Aliases=['cpp','c','c++'];
Added: logback/trunk/logback-site/src/site/pages/ghighlighter/js/shBrushCss.js
==============================================================================
--- (empty file)
+++ logback/trunk/logback-site/src/site/pages/ghighlighter/js/shBrushCss.js Sat Aug 16 19:32:40 2008
@@ -0,0 +1,14 @@
+/*
+ * JsMin
+ * Javascript Compressor
+ * http://www.crockford.com/
+ * http://www.smallsharptools.com/
+*/
+
+dp.sh.Brushes.CSS=function()
+{var keywords='ascent azimuth background-attachment background-color background-image background-position '+'background-repeat background baseline bbox border-collapse border-color border-spacing border-style border-top '+'border-right border-bottom border-left border-top-color border-right-color border-bottom-color border-left-color '+'border-top-style border-right-style border-bottom-style border-left-style border-top-width border-right-width '+'border-bottom-width border-left-width border-width border cap-height caption-side centerline clear clip color '+'content counter-increment counter-reset cue-after cue-before cue cursor definition-src descent direction display '+'elevation empty-cells float font-size-adjust font-family font-size font-stretch font-style font-variant font-weight font '+'height letter-spacing line-height list-style-image list-style-position list-style-type list-style margin-top '+'margin-right margin-bottom margin-left margin marker-offset marks mathli
ne max-height max-width min-height min-width orphans '+'outline-color outline-style outline-width outline overflow padding-top padding-right padding-bottom padding-left padding page '+'page-break-after page-break-before page-break-inside pause pause-after pause-before pitch pitch-range play-during position '+'quotes richness size slope src speak-header speak-numeral speak-punctuation speak speech-rate stemh stemv stress '+'table-layout text-align text-decoration text-indent text-shadow text-transform unicode-bidi unicode-range units-per-em '+'vertical-align visibility voice-family volume white-space widows width widths word-spacing x-height z-index';var values='above absolute all always aqua armenian attr aural auto avoid baseline behind below bidi-override black blink block blue bold bolder '+'both bottom braille capitalize caption center center-left center-right circle close-quote code collapse compact condensed '+'continuous counter counters crop cross crosshair cursive d
ashed decimal decimal-leading-zero default digits disc dotted double '+'embed embossed e-resize expanded extra-condensed extra-expanded fantasy far-left far-right fast faster fixed format fuchsia '+'gray green groove handheld hebrew help hidden hide high higher icon inline-table inline inset inside invert italic '+'justify landscape large larger left-side left leftwards level lighter lime line-through list-item local loud lower-alpha '+'lowercase lower-greek lower-latin lower-roman lower low ltr marker maroon medium message-box middle mix move narrower '+'navy ne-resize no-close-quote none no-open-quote no-repeat normal nowrap n-resize nw-resize oblique olive once open-quote outset '+'outside overline pointer portrait pre print projection purple red relative repeat repeat-x repeat-y rgb ridge right right-side '+'rightwards rtl run-in screen scroll semi-condensed semi-expanded separate se-resize show silent silver slower slow '+'small small-caps small-caption smaller soft sol
id speech spell-out square s-resize static status-bar sub super sw-resize '+'table-caption table-cell table-column table-column-group table-footer-group table-header-group table-row table-row-group teal '+'text-bottom text-top thick thin top transparent tty tv ultra-condensed ultra-expanded underline upper-alpha uppercase upper-latin '+'upper-roman url visible wait white wider w-resize x-fast x-high x-large x-loud x-low x-slow x-small x-soft xx-large xx-small yellow';var fonts='[mM]onospace [tT]ahoma [vV]erdana [aA]rial [hH]elvetica [sS]ans-serif [sS]erif';this.regexList=[{regex:dp.sh.RegexLib.MultiLineCComments,css:'comment'},{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'},{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'},{regex:new RegExp('\\#[a-zA-Z0-9]{3,6}','g'),css:'value'},{regex:new RegExp('(-?\\d+)(\.\\d+)?(px|em|pt|\:|\%|)','g'),css:'value'},{regex:new RegExp('!important','g'),css:'important'},{regex:new RegExp(this.GetKeywordsCSS(keywords),'gm'),css:'k
eyword'},{regex:new RegExp(this.GetValuesCSS(values),'g'),css:'value'},{regex:new RegExp(this.GetValuesCSS(fonts),'g'),css:'value'}];this.CssClass='dp-css';this.Style='.dp-css .value { color: black; }'+'.dp-css .important { color: red; }';}
+dp.sh.Highlighter.prototype.GetKeywordsCSS=function(str)
+{return'\\b([a-z_]|)'+str.replace(/ /g,'(?=:)\\b|\\b([a-z_\\*]|\\*|)')+'(?=:)\\b';}
+dp.sh.Highlighter.prototype.GetValuesCSS=function(str)
+{return'\\b'+str.replace(/ /g,'(?!-)(?!:)\\b|\\b()')+'\:\\b';}
+dp.sh.Brushes.CSS.prototype=new dp.sh.Highlighter();dp.sh.Brushes.CSS.Aliases=['css'];
Added: logback/trunk/logback-site/src/site/pages/ghighlighter/js/shBrushDelphi.js
==============================================================================
--- (empty file)
+++ logback/trunk/logback-site/src/site/pages/ghighlighter/js/shBrushDelphi.js Sat Aug 16 19:32:40 2008
@@ -0,0 +1,10 @@
+/*
+ * JsMin
+ * Javascript Compressor
+ * http://www.crockford.com/
+ * http://www.smallsharptools.com/
+*/
+
+dp.sh.Brushes.Delphi=function()
+{var keywords='abs addr and ansichar ansistring array as asm begin boolean byte cardinal '+'case char class comp const constructor currency destructor div do double '+'downto else end except exports extended false file finalization finally '+'for function goto if implementation in inherited int64 initialization '+'integer interface is label library longint longword mod nil not object '+'of on or packed pansichar pansistring pchar pcurrency pdatetime pextended '+'pint64 pointer private procedure program property pshortstring pstring '+'pvariant pwidechar pwidestring protected public published raise real real48 '+'record repeat set shl shortint shortstring shr single smallint string then '+'threadvar to true try type unit until uses val var varirnt while widechar '+'widestring with word write writeln xor';this.regexList=[{regex:new RegExp('\\(\\*[\\s\\S]*?\\*\\)','gm'),css:'comment'},{regex:new RegExp('{(?!\\$)[\\s\\S]*?}','gm'),css:'comment'},{regex:dp.sh.RegexLib.SingleLineC
Comments,css:'comment'},{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'},{regex:new RegExp('\\{\\$[a-zA-Z]+ .+\\}','g'),css:'directive'},{regex:new RegExp('\\b[\\d\\.]+\\b','g'),css:'number'},{regex:new RegExp('\\$[a-zA-Z0-9]+\\b','g'),css:'number'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'}];this.CssClass='dp-delphi';this.Style='.dp-delphi .number { color: blue; }'+'.dp-delphi .directive { color: #008284; }'+'.dp-delphi .vars { color: #000; }';}
+dp.sh.Brushes.Delphi.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Delphi.Aliases=['delphi','pascal'];
Added: logback/trunk/logback-site/src/site/pages/ghighlighter/js/shBrushJScript.js
==============================================================================
--- (empty file)
+++ logback/trunk/logback-site/src/site/pages/ghighlighter/js/shBrushJScript.js Sat Aug 16 19:32:40 2008
@@ -0,0 +1,10 @@
+/*
+ * JsMin
+ * Javascript Compressor
+ * http://www.crockford.com/
+ * http://www.smallsharptools.com/
+*/
+
+dp.sh.Brushes.JScript=function()
+{var keywords='abstract boolean break byte case catch char class const continue debugger '+'default delete do double else enum export extends false final finally float '+'for function goto if implements import in instanceof int interface long native '+'new null package private protected public return short static super switch '+'synchronized this throw throws transient true try typeof var void volatile while with';this.regexList=[{regex:dp.sh.RegexLib.SingleLineCComments,css:'comment'},{regex:dp.sh.RegexLib.MultiLineCComments,css:'comment'},{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'},{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'},{regex:new RegExp('^\\s*#.*','gm'),css:'preprocessor'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'}];this.CssClass='dp-c';}
+dp.sh.Brushes.JScript.prototype=new dp.sh.Highlighter();dp.sh.Brushes.JScript.Aliases=['js','jscript','javascript'];
Added: logback/trunk/logback-site/src/site/pages/ghighlighter/js/shBrushJava.js
==============================================================================
--- (empty file)
+++ logback/trunk/logback-site/src/site/pages/ghighlighter/js/shBrushJava.js Sat Aug 16 19:32:40 2008
@@ -0,0 +1,10 @@
+/*
+ * JsMin
+ * Javascript Compressor
+ * http://www.crockford.com/
+ * http://www.smallsharptools.com/
+*/
+
+dp.sh.Brushes.Java=function()
+{var keywords='abstract assert boolean break byte case catch char class const '+'continue default do double else enum extends '+'false final finally float for goto if implements import '+'instanceof int interface long native new null '+'package private protected public return '+'short static strictfp super switch synchronized this throw throws true '+'transient try void volatile while';this.regexList=[{regex:dp.sh.RegexLib.SingleLineCComments,css:'comment'},{regex:dp.sh.RegexLib.MultiLineCComments,css:'comment'},{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'},{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'},{regex:new RegExp('\\b([\\d]+(\\.[\\d]+)?|0x[a-f0-9]+)\\b','gi'),css:'number'},{regex:new RegExp('(?!\\@interface\\b)\\@[\\$\\w]+\\b','g'),css:'annotation'},{regex:new RegExp('\\@interface\\b','g'),css:'keyword'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'}];this.CssClass='dp-j';this.Style='.dp-j .annotation { color: #646464; }'+'.dp-j .n
umber { color: #C00000; }';}
+dp.sh.Brushes.Java.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Java.Aliases=['java'];
Added: logback/trunk/logback-site/src/site/pages/ghighlighter/js/shBrushPhp.js
==============================================================================
--- (empty file)
+++ logback/trunk/logback-site/src/site/pages/ghighlighter/js/shBrushPhp.js Sat Aug 16 19:32:40 2008
@@ -0,0 +1,10 @@
+/*
+ * JsMin
+ * Javascript Compressor
+ * http://www.crockford.com/
+ * http://www.smallsharptools.com/
+*/
+
+dp.sh.Brushes.Php=function()
+{var funcs='abs acos acosh addcslashes addslashes '+'array_change_key_case array_chunk array_combine array_count_values array_diff '+'array_diff_assoc array_diff_key array_diff_uassoc array_diff_ukey array_fill '+'array_filter array_flip array_intersect array_intersect_assoc array_intersect_key '+'array_intersect_uassoc array_intersect_ukey array_key_exists array_keys array_map '+'array_merge array_merge_recursive array_multisort array_pad array_pop array_product '+'array_push array_rand array_reduce array_reverse array_search array_shift '+'array_slice array_splice array_sum array_udiff array_udiff_assoc '+'array_udiff_uassoc array_uintersect array_uintersect_assoc '+'array_uintersect_uassoc array_unique array_unshift array_values array_walk '+'array_walk_recursive atan atan2 atanh base64_decode base64_encode base_convert '+'basename bcadd bccomp bcdiv bcmod bcmul bindec bindtextdomain bzclose bzcompress '+'bzdecompress bzerrno bzerror bzerrstr bzflush bzopen bzread bzwrite
ceil chdir '+'checkdate checkdnsrr chgrp chmod chop chown chr chroot chunk_split class_exists '+'closedir closelog copy cos cosh count count_chars date decbin dechex decoct '+'deg2rad delete ebcdic2ascii echo empty end ereg ereg_replace eregi eregi_replace error_log '+'error_reporting escapeshellarg escapeshellcmd eval exec exit exp explode extension_loaded '+'feof fflush fgetc fgetcsv fgets fgetss file_exists file_get_contents file_put_contents '+'fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype '+'floatval flock floor flush fmod fnmatch fopen fpassthru fprintf fputcsv fputs fread fscanf '+'fseek fsockopen fstat ftell ftok getallheaders getcwd getdate getenv gethostbyaddr gethostbyname '+'gethostbynamel getimagesize getlastmod getmxrr getmygid getmyinode getmypid getmyuid getopt '+'getprotobyname getprotobynumber getrandmax getrusage getservbyname getservbyport gettext '+'gettimeofday gettype glob gmdate gmmktime ini_alter ini_get ini
_get_all ini_restore ini_set '+'interface_exists intval ip2long is_a is_array is_bool is_callable is_dir is_double '+'is_executable is_file is_finite is_float is_infinite is_int is_integer is_link is_long '+'is_nan is_null is_numeric is_object is_readable is_real is_resource is_scalar is_soap_fault '+'is_string is_subclass_of is_uploaded_file is_writable is_writeable mkdir mktime nl2br '+'parse_ini_file parse_str parse_url passthru pathinfo readlink realpath rewind rewinddir rmdir '+'round str_ireplace str_pad str_repeat str_replace str_rot13 str_shuffle str_split '+'str_word_count strcasecmp strchr strcmp strcoll strcspn strftime strip_tags stripcslashes '+'stripos stripslashes stristr strlen strnatcasecmp strnatcmp strncasecmp strncmp strpbrk '+'strpos strptime strrchr strrev strripos strrpos strspn strstr strtok strtolower strtotime '+'strtoupper strtr strval substr substr_compare';var keywords='and or xor __FILE__ __LINE__ array as break case '+'cfunction class const con
tinue declare default die do else '+'elseif empty enddeclare endfor endforeach endif endswitch endwhile '+'extends for foreach function include include_once global if '+'new old_function return static switch use require require_once '+'var while __FUNCTION__ __CLASS__ '+'__METHOD__ abstract interface public implements extends private protected throw';this.regexList=[{regex:dp.sh.RegexLib.SingleLineCComments,css:'comment'},{regex:dp.sh.RegexLib.MultiLineCComments,css:'comment'},{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'},{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'},{regex:new RegExp('\\$\\w+','g'),css:'vars'},{regex:new RegExp(this.GetKeywords(funcs),'gmi'),css:'func'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'}];this.CssClass='dp-c';}
+dp.sh.Brushes.Php.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Php.Aliases=['php'];
Added: logback/trunk/logback-site/src/site/pages/ghighlighter/js/shBrushPython.js
==============================================================================
--- (empty file)
+++ logback/trunk/logback-site/src/site/pages/ghighlighter/js/shBrushPython.js Sat Aug 16 19:32:40 2008
@@ -0,0 +1,11 @@
+/*
+ * JsMin
+ * Javascript Compressor
+ * http://www.crockford.com/
+ * http://www.smallsharptools.com/
+*/
+
+dp.sh.Brushes.Python=function()
+{var keywords='and assert break class continue def del elif else '+'except exec finally for from global if import in is '+'lambda not or pass print raise return try yield while';var special='None True False self cls class_'
+this.regexList=[{regex:dp.sh.RegexLib.SingleLinePerlComments,css:'comment'},{regex:new RegExp("^\\s*@\\w+",'gm'),css:'decorator'},{regex:new RegExp("(['\"]{3})([^\\1])*?\\1",'gm'),css:'comment'},{regex:new RegExp('"(?!")(?:\\.|\\\\\\"|[^\\""\\n\\r])*"','gm'),css:'string'},{regex:new RegExp("'(?!')*(?:\\.|(\\\\\\')|[^\\''\\n\\r])*'",'gm'),css:'string'},{regex:new RegExp("\\b\\d+\\.?\\w*",'g'),css:'number'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'},{regex:new RegExp(this.GetKeywords(special),'gm'),css:'special'}];this.CssClass='dp-py';this.Style='.dp-py .builtins { color: #ff1493; }'+'.dp-py .magicmethods { color: #808080; }'+'.dp-py .exceptions { color: brown; }'+'.dp-py .types { color: brown; font-style: italic; }'+'.dp-py .commonlibs { color: #8A2BE2; font-style: italic; }';}
+dp.sh.Brushes.Python.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Python.Aliases=['py','python'];
Added: logback/trunk/logback-site/src/site/pages/ghighlighter/js/shBrushRuby.js
==============================================================================
--- (empty file)
+++ logback/trunk/logback-site/src/site/pages/ghighlighter/js/shBrushRuby.js Sat Aug 16 19:32:40 2008
@@ -0,0 +1,11 @@
+/*
+ * JsMin
+ * Javascript Compressor
+ * http://www.crockford.com/
+ * http://www.smallsharptools.com/
+*/
+
+dp.sh.Brushes.Ruby=function()
+{var keywords='alias and BEGIN begin break case class def define_method defined do each else elsif '+'END end ensure false for if in module new next nil not or raise redo rescue retry return '+'self super then throw true undef unless until when while yield';var builtins='Array Bignum Binding Class Continuation Dir Exception FalseClass File::Stat File Fixnum Fload '+'Hash Integer IO MatchData Method Module NilClass Numeric Object Proc Range Regexp String Struct::TMS Symbol '+'ThreadGroup Thread Time TrueClass'
+this.regexList=[{regex:dp.sh.RegexLib.SingleLinePerlComments,css:'comment'},{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'},{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'},{regex:new RegExp(':[a-z][A-Za-z0-9_]*','g'),css:'symbol'},{regex:new RegExp('(\\$|@@|@)\\w+','g'),css:'variable'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'},{regex:new RegExp(this.GetKeywords(builtins),'gm'),css:'builtin'}];this.CssClass='dp-rb';this.Style='.dp-rb .symbol { color: #a70; }'+'.dp-rb .variable { color: #a70; font-weight: bold; }';}
+dp.sh.Brushes.Ruby.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Ruby.Aliases=['ruby','rails','ror'];
Added: logback/trunk/logback-site/src/site/pages/ghighlighter/js/shBrushSql.js
==============================================================================
--- (empty file)
+++ logback/trunk/logback-site/src/site/pages/ghighlighter/js/shBrushSql.js Sat Aug 16 19:32:40 2008
@@ -0,0 +1,10 @@
+/*
+ * JsMin
+ * Javascript Compressor
+ * http://www.crockford.com/
+ * http://www.smallsharptools.com/
+*/
+
+dp.sh.Brushes.Sql=function()
+{var funcs='abs avg case cast coalesce convert count current_timestamp '+'current_user day isnull left lower month nullif replace right '+'session_user space substring sum system_user upper user year';var keywords='absolute action add after alter as asc at authorization begin bigint '+'binary bit by cascade char character check checkpoint close collate '+'column commit committed connect connection constraint contains continue '+'create cube current current_date current_time cursor database date '+'deallocate dec decimal declare default delete desc distinct double drop '+'dynamic else end end-exec escape except exec execute false fetch first '+'float for force foreign forward free from full function global goto grant '+'group grouping having hour ignore index inner insensitive insert instead '+'int integer intersect into is isolation key last level load local max min '+'minute modify move name national nchar next no numeric of off on only '+'open option order out output parti
al password precision prepare primary '+'prior privileges procedure public read real references relative repeatable '+'restrict return returns revoke rollback rollup rows rule schema scroll '+'second section select sequence serializable set size smallint static '+'statistics table temp temporary then time timestamp to top transaction '+'translation trigger true truncate uncommitted union unique update values '+'varchar varying view when where with work';var operators='all and any between cross in join like not null or outer some';this.regexList=[{regex:new RegExp('--(.*)$','gm'),css:'comment'},{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'},{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'},{regex:new RegExp(this.GetKeywords(funcs),'gmi'),css:'func'},{regex:new RegExp(this.GetKeywords(operators),'gmi'),css:'op'},{regex:new RegExp(this.GetKeywords(keywords),'gmi'),css:'keyword'}];this.CssClass='dp-sql';this.Style='.dp-sql .func { color: #ff1493; }'+'.dp-sql .op { c
olor: #808080; }';}
+dp.sh.Brushes.Sql.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Sql.Aliases=['sql'];
Added: logback/trunk/logback-site/src/site/pages/ghighlighter/js/shBrushVb.js
==============================================================================
--- (empty file)
+++ logback/trunk/logback-site/src/site/pages/ghighlighter/js/shBrushVb.js Sat Aug 16 19:32:40 2008
@@ -0,0 +1,10 @@
+/*
+ * JsMin
+ * Javascript Compressor
+ * http://www.crockford.com/
+ * http://www.smallsharptools.com/
+*/
+
+dp.sh.Brushes.Vb=function()
+{var keywords='AddHandler AddressOf AndAlso Alias And Ansi As Assembly Auto '+'Boolean ByRef Byte ByVal Call Case Catch CBool CByte CChar CDate '+'CDec CDbl Char CInt Class CLng CObj Const CShort CSng CStr CType '+'Date Decimal Declare Default Delegate Dim DirectCast Do Double Each '+'Else ElseIf End Enum Erase Error Event Exit False Finally For Friend '+'Function Get GetType GoSub GoTo Handles If Implements Imports In '+'Inherits Integer Interface Is Let Lib Like Long Loop Me Mod Module '+'MustInherit MustOverride MyBase MyClass Namespace New Next Not Nothing '+'NotInheritable NotOverridable Object On Option Optional Or OrElse '+'Overloads Overridable Overrides ParamArray Preserve Private Property '+'Protected Public RaiseEvent ReadOnly ReDim REM RemoveHandler Resume '+'Return Select Set Shadows Shared Short Single Static Step Stop String '+'Structure Sub SyncLock Then Throw To True Try TypeOf Unicode Until '+'Variant When While With WithEvents WriteOnly Xor';this.regexList
=[{regex:new RegExp('\'.*$','gm'),css:'comment'},{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'},{regex:new RegExp('^\\s*#.*','gm'),css:'preprocessor'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'}];this.CssClass='dp-vb';}
+dp.sh.Brushes.Vb.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Vb.Aliases=['vb','vb.net'];
Added: logback/trunk/logback-site/src/site/pages/ghighlighter/js/shBrushXml.js
==============================================================================
--- (empty file)
+++ logback/trunk/logback-site/src/site/pages/ghighlighter/js/shBrushXml.js Sat Aug 16 19:32:40 2008
@@ -0,0 +1,19 @@
+/*
+ * JsMin
+ * Javascript Compressor
+ * http://www.crockford.com/
+ * http://www.smallsharptools.com/
+*/
+
+dp.sh.Brushes.Xml=function()
+{this.CssClass='dp-xml';this.Style='.dp-xml .cdata { color: #ff1493; }'+'.dp-xml .tag, .dp-xml .tag-name { color: #069; font-weight: bold; }'+'.dp-xml .attribute { color: red; }'+'.dp-xml .attribute-value { color: blue; }';}
+dp.sh.Brushes.Xml.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Xml.Aliases=['xml','xhtml','xslt','html','xhtml'];dp.sh.Brushes.Xml.prototype.ProcessRegexList=function()
+{function push(array,value)
+{array[array.length]=value;}
+var index=0;var match=null;var regex=null;this.GetMatches(new RegExp('(\<|<)\\!\\[[\\w\\s]*?\\[(.|\\s)*?\\]\\](\>|>)','gm'),'cdata');this.GetMatches(new RegExp('(\<|<)!--\\s*.*?\\s*--(\>|>)','gm'),'comments');regex=new RegExp('([:\\w-\.]+)\\s*=\\s*(".*?"|\'.*?\'|\\w+)*|(\\w+)','gm');while((match=regex.exec(this.code))!=null)
+{if(match[1]==null)
+{continue;}
+push(this.matches,new dp.sh.Match(match[1],match.index,'attribute'));if(match[2]!=undefined)
+{push(this.matches,new dp.sh.Match(match[2],match.index+match[0].indexOf(match[2]),'attribute-value'));}}
+this.GetMatches(new RegExp('(\<|<)/*\\?*(?!\\!)|/*\\?*(\>|>)','gm'),'tag');regex=new RegExp('(?:\<|<)/*\\?*\\s*([:\\w-\.]+)','gm');while((match=regex.exec(this.code))!=null)
+{push(this.matches,new dp.sh.Match(match[1],match.index+match[0].indexOf(match[1]),'tag-name'));}}
Added: logback/trunk/logback-site/src/site/pages/ghighlighter/js/shCore.js
==============================================================================
--- (empty file)
+++ logback/trunk/logback-site/src/site/pages/ghighlighter/js/shCore.js Sat Aug 16 19:32:40 2008
@@ -0,0 +1,161 @@
+/*
+ * JsMin
+ * Javascript Compressor
+ * http://www.crockford.com/
+ * http://www.smallsharptools.com/
+*/
+
+var dp={sh:{Toolbar:{},Utils:{},RegexLib:{},Brushes:{},Strings:{AboutDialog:'<html><head><title>About...</title></head><body class="dp-about"><table cellspacing="0"><tr><td class="copy"><p class="title">dp.SyntaxHighlighter</div><div class="para">Version: {V}</p><p><a href="http://www.dreamprojections.com/syntaxhighlighter/?ref=about" target="_blank">http://www.dreamprojections.com/syntaxhighlighter</a></p>©2004-2007 Alex Gorbatchev.</td></tr><tr><td class="footer"><input type="button" class="close" value="OK" onClick="window.close()"/></td></tr></table></body></html>'},ClipboardSwf:null,Version:'1.5.1'}};dp.SyntaxHighlighter=dp.sh;dp.sh.Toolbar.Commands={ExpandSource:{label:'+ expand source',check:function(highlighter){return highlighter.collapse;},func:function(sender,highlighter)
+{sender.parentNode.removeChild(sender);highlighter.div.className=highlighter.div.className.replace('collapsed','');}},ViewSource:{label:'view plain',func:function(sender,highlighter)
+{var code=dp.sh.Utils.FixForBlogger(highlighter.originalCode).replace(/</g,'<');var wnd=window.open('','_blank','width=750, height=400, location=0, resizable=1, menubar=0, scrollbars=0');wnd.document.write('<textarea style="width:99%;height:99%">'+code+'</textarea>');wnd.document.close();}},CopyToClipboard:{label:'copy to clipboard',check:function(){return window.clipboardData!=null||dp.sh.ClipboardSwf!=null;},func:function(sender,highlighter)
+{var code=dp.sh.Utils.FixForBlogger(highlighter.originalCode).replace(/</g,'<').replace(/>/g,'>').replace(/&/g,'&');if(window.clipboardData)
+{window.clipboardData.setData('text',code);}
+else if(dp.sh.ClipboardSwf!=null)
+{var flashcopier=highlighter.flashCopier;if(flashcopier==null)
+{flashcopier=document.createElement('div');highlighter.flashCopier=flashcopier;highlighter.div.appendChild(flashcopier);}
+flashcopier.innerHTML='<embed src="'+dp.sh.ClipboardSwf+'" FlashVars="clipboard='+encodeURIComponent(code)+'" width="0" height="0" type="application/x-shockwave-flash"></embed>';}
+alert('The code is in your clipboard now');}},PrintSource:{label:'print',func:function(sender,highlighter)
+{var iframe=document.createElement('IFRAME');var doc=null;iframe.style.cssText='position:absolute;width:0px;height:0px;left:-500px;top:-500px;';document.body.appendChild(iframe);doc=iframe.contentWindow.document;dp.sh.Utils.CopyStyles(doc,window.document);doc.write('<div class="'+highlighter.div.className.replace('collapsed','')+' printing">'+highlighter.div.innerHTML+'</div>');doc.close();iframe.contentWindow.focus();iframe.contentWindow.print();alert('Printing...');document.body.removeChild(iframe);}},About:{label:'?',func:function(highlighter)
+{var wnd=window.open('','_blank','dialog,width=300,height=150,scrollbars=0');var doc=wnd.document;dp.sh.Utils.CopyStyles(doc,window.document);doc.write(dp.sh.Strings.AboutDialog.replace('{V}',dp.sh.Version));doc.close();wnd.focus();}}};dp.sh.Toolbar.Create=function(highlighter)
+{var div=document.createElement('DIV');div.className='tools';for(var name in dp.sh.Toolbar.Commands)
+{var cmd=dp.sh.Toolbar.Commands[name];if(cmd.check!=null&&!cmd.check(highlighter))
+continue;div.innerHTML+='<a href="#" onclick="dp.sh.Toolbar.Command(\''+name+'\',this);return false;">'+cmd.label+'</a>';}
+return div;}
+dp.sh.Toolbar.Command=function(name,sender)
+{var n=sender;while(n!=null&&n.className.indexOf('dp-highlighter')==-1)
+n=n.parentNode;if(n!=null)
+dp.sh.Toolbar.Commands[name].func(sender,n.highlighter);}
+dp.sh.Utils.CopyStyles=function(destDoc,sourceDoc)
+{var links=sourceDoc.getElementsByTagName('link');for(var i=0;i<links.length;i++)
+if(links[i].rel.toLowerCase()=='stylesheet')
+destDoc.write('<link type="text/css" rel="stylesheet" href="'+links[i].href+'"></link>');}
+dp.sh.Utils.FixForBlogger=function(str)
+{return(dp.sh.isBloggerMode==true)?str.replace(/<br\s*\/?>|<br\s*\/?>/gi,'\n'):str;}
+dp.sh.RegexLib={MultiLineCComments:new RegExp('/\\*[\\s\\S]*?\\*/','gm'),SingleLineCComments:new RegExp('//.*$','gm'),SingleLinePerlComments:new RegExp('#.*$','gm'),DoubleQuotedString:new RegExp('"(?:\\.|(\\\\\\")|[^\\""\\n])*"','g'),SingleQuotedString:new RegExp("'(?:\\.|(\\\\\\')|[^\\''\\n])*'",'g')};dp.sh.Match=function(value,index,css)
+{this.value=value;this.index=index;this.length=value.length;this.css=css;}
+dp.sh.Highlighter=function()
+{this.noGutter=false;this.addControls=true;this.collapse=false;this.tabsToSpaces=true;this.wrapColumn=80;this.showColumns=true;}
+dp.sh.Highlighter.SortCallback=function(m1,m2)
+{if(m1.index<m2.index)
+return-1;else if(m1.index>m2.index)
+return 1;else
+{if(m1.length<m2.length)
+return-1;else if(m1.length>m2.length)
+return 1;}
+return 0;}
+dp.sh.Highlighter.prototype.CreateElement=function(name)
+{var result=document.createElement(name);result.highlighter=this;return result;}
+dp.sh.Highlighter.prototype.GetMatches=function(regex,css)
+{var index=0;var match=null;while((match=regex.exec(this.code))!=null)
+this.matches[this.matches.length]=new dp.sh.Match(match[0],match.index,css);}
+dp.sh.Highlighter.prototype.AddBit=function(str,css)
+{if(str==null||str.length==0)
+return;var span=this.CreateElement('SPAN');str=str.replace(/ /g,' ');str=str.replace(/</g,'<');str=str.replace(/\n/gm,' <br>');if(css!=null)
+{if((/br/gi).test(str))
+{var lines=str.split(' <br>');for(var i=0;i<lines.length;i++)
+{span=this.CreateElement('SPAN');span.className=css;span.innerHTML=lines[i];this.div.appendChild(span);if(i+1<lines.length)
+this.div.appendChild(this.CreateElement('BR'));}}
+else
+{span.className=css;span.innerHTML=str;this.div.appendChild(span);}}
+else
+{span.innerHTML=str;this.div.appendChild(span);}}
+dp.sh.Highlighter.prototype.IsInside=function(match)
+{if(match==null||match.length==0)
+return false;for(var i=0;i<this.matches.length;i++)
+{var c=this.matches[i];if(c==null)
+continue;if((match.index>c.index)&&(match.index<c.index+c.length))
+return true;}
+return false;}
+dp.sh.Highlighter.prototype.ProcessRegexList=function()
+{for(var i=0;i<this.regexList.length;i++)
+this.GetMatches(this.regexList[i].regex,this.regexList[i].css);}
+dp.sh.Highlighter.prototype.ProcessSmartTabs=function(code)
+{var lines=code.split('\n');var result='';var tabSize=4;var tab='\t';function InsertSpaces(line,pos,count)
+{var left=line.substr(0,pos);var right=line.substr(pos+1,line.length);var spaces='';for(var i=0;i<count;i++)
+spaces+=' ';return left+spaces+right;}
+function ProcessLine(line,tabSize)
+{if(line.indexOf(tab)==-1)
+return line;var pos=0;while((pos=line.indexOf(tab))!=-1)
+{var spaces=tabSize-pos%tabSize;line=InsertSpaces(line,pos,spaces);}
+return line;}
+for(var i=0;i<lines.length;i++)
+result+=ProcessLine(lines[i],tabSize)+'\n';return result;}
+dp.sh.Highlighter.prototype.SwitchToList=function()
+{var html=this.div.innerHTML.replace(/<(br)\/?>/gi,'\n');var lines=html.split('\n');if(this.addControls==true)
+this.bar.appendChild(dp.sh.Toolbar.Create(this));if(this.showColumns)
+{var div=this.CreateElement('div');var columns=this.CreateElement('div');var showEvery=10;var i=1;while(i<=150)
+{if(i%showEvery==0)
+{div.innerHTML+=i;i+=(i+'').length;}
+else
+{div.innerHTML+='·';i++;}}
+columns.className='columns';columns.appendChild(div);this.bar.appendChild(columns);}
+for(var i=0,lineIndex=this.firstLine;i<lines.length-1;i++,lineIndex++)
+{var li=this.CreateElement('LI');var span=this.CreateElement('SPAN');li.className=(i%2==0)?'alt':'';span.innerHTML=lines[i]+' ';li.appendChild(span);this.ol.appendChild(li);}
+this.div.innerHTML='';}
+dp.sh.Highlighter.prototype.Highlight=function(code)
+{function Trim(str)
+{return str.replace(/^\s*(.*?)[\s\n]*$/g,'$1');}
+function Chop(str)
+{return str.replace(/\n*$/,'').replace(/^\n*/,'');}
+function Unindent(str)
+{var lines=dp.sh.Utils.FixForBlogger(str).split('\n');var indents=new Array();var regex=new RegExp('^\\s*','g');var min=1000;for(var i=0;i<lines.length&&min>0;i++)
+{if(Trim(lines[i]).length==0)
+continue;var matches=regex.exec(lines[i]);if(matches!=null&&matches.length>0)
+min=Math.min(matches[0].length,min);}
+if(min>0)
+for(var i=0;i<lines.length;i++)
+lines[i]=lines[i].substr(min);return lines.join('\n');}
+function Copy(string,pos1,pos2)
+{return string.substr(pos1,pos2-pos1);}
+var pos=0;if(code==null)
+code='';this.originalCode=code;this.code=Chop(Unindent(code));this.div=this.CreateElement('DIV');this.bar=this.CreateElement('DIV');this.ol=this.CreateElement('OL');this.matches=new Array();this.div.className='dp-highlighter';this.div.highlighter=this;this.bar.className='bar';this.ol.start=this.firstLine;if(this.CssClass!=null)
+this.ol.className=this.CssClass;if(this.collapse)
+this.div.className+=' collapsed';if(this.noGutter)
+this.div.className+=' nogutter';if(this.tabsToSpaces==true)
+this.code=this.ProcessSmartTabs(this.code);this.ProcessRegexList();if(this.matches.length==0)
+{this.AddBit(this.code,null);this.SwitchToList();this.div.appendChild(this.bar);this.div.appendChild(this.ol);return;}
+this.matches=this.matches.sort(dp.sh.Highlighter.SortCallback);for(var i=0;i<this.matches.length;i++)
+if(this.IsInside(this.matches[i]))
+this.matches[i]=null;for(var i=0;i<this.matches.length;i++)
+{var match=this.matches[i];if(match==null||match.length==0)
+continue;this.AddBit(Copy(this.code,pos,match.index),null);this.AddBit(match.value,match.css);pos=match.index+match.length;}
+this.AddBit(this.code.substr(pos),null);this.SwitchToList();this.div.appendChild(this.bar);this.div.appendChild(this.ol);}
+dp.sh.Highlighter.prototype.GetKeywords=function(str)
+{return'\\b'+str.replace(/ /g,'\\b|\\b')+'\\b';}
+dp.sh.BloggerMode=function()
+{dp.sh.isBloggerMode=true;}
+dp.sh.HighlightAll=function(name,showGutter,showControls,collapseAll,firstLine,showColumns)
+{function FindValue()
+{var a=arguments;for(var i=0;i<a.length;i++)
+{if(a[i]==null)
+continue;if(typeof(a[i])=='string'&&a[i]!='')
+return a[i]+'';if(typeof(a[i])=='object'&&a[i].value!='')
+return a[i].value+'';}
+return null;}
+function IsOptionSet(value,list)
+{for(var i=0;i<list.length;i++)
+if(list[i]==value)
+return true;return false;}
+function GetOptionValue(name,list,defaultValue)
+{var regex=new RegExp('^'+name+'\\[(\\w+)\\]$','gi');var matches=null;for(var i=0;i<list.length;i++)
+if((matches=regex.exec(list[i]))!=null)
+return matches[1];return defaultValue;}
+function FindTagsByName(list,name,tagName)
+{var tags=document.getElementsByTagName(tagName);for(var i=0;i<tags.length;i++)
+if(tags[i].getAttribute('name')==name)
+list.push(tags[i]);}
+var elements=[];var highlighter=null;var registered={};var propertyName='innerHTML';FindTagsByName(elements,name,'pre');FindTagsByName(elements,name,'textarea');if(elements.length==0)
+return;for(var brush in dp.sh.Brushes)
+{var aliases=dp.sh.Brushes[brush].Aliases;if(aliases==null)
+continue;for(var i=0;i<aliases.length;i++)
+registered[aliases[i]]=brush;}
+for(var i=0;i<elements.length;i++)
+{var element=elements[i];var options=FindValue(element.attributes['class'],element.className,element.attributes['language'],element.language);var language='';if(options==null)
+continue;options=options.split(':');language=options[0].toLowerCase();if(registered[language]==null)
+continue;highlighter=new dp.sh.Brushes[registered[language]]();element.style.display='none';highlighter.noGutter=(showGutter==null)?IsOptionSet('nogutter',options):!showGutter;highlighter.addControls=(showControls==null)?!IsOptionSet('nocontrols',options):showControls;highlighter.collapse=(collapseAll==null)?IsOptionSet('collapse',options):collapseAll;highlighter.showColumns=(showColumns==null)?IsOptionSet('showcolumns',options):showColumns;var headNode=document.getElementsByTagName('head')[0];if(highlighter.Style&&headNode)
+{var styleNode=document.createElement('style');styleNode.setAttribute('type','text/css');if(styleNode.styleSheet)
+{styleNode.styleSheet.cssText=highlighter.Style;}
+else
+{var textNode=document.createTextNode(highlighter.Style);styleNode.appendChild(textNode);}
+headNode.appendChild(styleNode);}
+highlighter.firstLine=(firstLine==null)?parseInt(GetOptionValue('firstline',options,1)):firstLine;highlighter.Highlight(element[propertyName]);highlighter.source=element;element.parentNode.insertBefore(highlighter.div,element);}}
Modified: logback/trunk/logback-site/src/site/pages/manual/joran.html
==============================================================================
--- logback/trunk/logback-site/src/site/pages/manual/joran.html (original)
+++ logback/trunk/logback-site/src/site/pages/manual/joran.html Sat Aug 16 19:32:40 2008
@@ -5,19 +5,25 @@
<title>Chapter3: Logback configuration & Joran</title>
<link rel="stylesheet" type="text/css" media="screen" href="../css/site.css" />
<link rel="stylesheet" type="text/css" media="print" href="../css/print.css" />
+<link type="text/css" rel="stylesheet" href="../ghighlighter/Styles/SyntaxHighlighter.css"></link>
</head>
<body>
- <script>
-prefix='../';
-</script>
-<script src="../templates/header.js"></script>
+ <script type="text/javascript">prefix='../'</script>
+ <script type="text/javascript" src="../templates/header.js"></script>
+ <script type="text/javascript" language="javascript" src="../ghighlighter/js/shCore.js"></script>
+ <script type="text/javascript" language="javascript" src="../ghighlighter/js/shBrushJava.js"></script>
+ <script type="text/javascript" language="javascript" src="../ghighlighter/js/shBrushXml.js"></script>
+ <script type="text/javascript" language="javascript">
+ window.onload = function () {
+ dp.SyntaxHighlighter.HighlightAll('code');
+ }
+ </script>
+
<div id="left">
- <script src="../templates/left.js"></script>
-</div>
-<div id="right">
- <script src="index_menu.js"></script>
+ <script type="text/javascript" src="../templates/left.js"></script>
</div>
+<div id="right"><script type="text/javascript" src="index_menu.js"></script></div>
<div id="content" class="chapter">
<h1>Chapter 3: Logback configuration & Joran</h1>
@@ -32,8 +38,27 @@
</div>
- <script src="../templates/creative.js"></script>
-
+ <script type="text/javascript" src="../templates/creative.js">
+ </script>
+
+
+ <pre name="code" class="java">
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class MyApp1 {
+ final static Logger logger = LoggerFactory.getLogger(MyApp1.class);
+
+ public static void main(String[] args) {
+ logger.info("Entering application.");
+
+ Foo foo = new Foo();
+ foo.doIt();
+ logger.info("Exiting application.");
+ }
+}
+ </pre>
+
<p>Joran stands for a cold north-west wind which, every now and
then, blows forcefully on Lake Geneva. Located right in the middle
of Europe, the Geneva lake happens to be the continent's largest
@@ -47,9 +72,12 @@
configure your own applications.
</p>
- <a name="auto_configuration">
- </a>
- <h2>Configuration in logback</h2>
+
+ <h2>
+ <a name="auto_configuration" href="#auto_configuration">
+ Configuration in logback
+ </a>
+ </h2>
<p>Inserting log requests into the application code requires a
fair amount of planning and effort. Observation shows that
@@ -251,18 +279,76 @@
<p>If everything goes well, you should see the following output on the console</p>
- <div class="source"><pre>17:58:31.328 [main] INFO chapter3.MyApp2 - Entering application.
-17:58:31,171 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - Ignoring debug attribute.
-17:58:31,171 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
-17:58:31,171 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [STDOUT]
-17:58:31,328 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Popping appender named [STDOUT] from the object stack
-17:58:31,328 |-INFO in ch.qos.logback.classic.joran.action.LevelAction - root level set to DEBUG
-17:58:31,328 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [STDOUT] to Logger[root]
-
-17:58:31.343 [main] DEBUG chapter3.Foo - Did it again!
-17:58:31.343 [main] INFO chapter3.MyApp2 - Exiting application.
+ <div class="source"><pre>17:44:58,578 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback-test.xml]
+17:44:58,671 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
+17:44:58,671 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
+17:44:58,687 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [STDOUT]
+17:44:58,812 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Popping appender named [STDOUT] from the object stack
+17:44:58,812 |-INFO in ch.qos.logback.classic.joran.action.LevelAction - root level set to DEBUG
+17:44:58,812 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [STDOUT] to Logger[root]
+
+17:44:58.828 [main] INFO chapter3.MyApp2 - Entering application.
+17:44:58.828 [main] DEBUG chapter3.Foo - Did it again!
+17:44:58.828 [main] INFO chapter3.MyApp2 - Exiting application.
</pre></div>
+ <p>At the end of this output, you can recognize the lines that were
+ printed in the previous example. You should also notice the
+ logback's internal messages, a.k.a. <code>Status</code> objects,
+ which allow convient access to logback's internal state.
+ </p>
+
+ <p>Instead of invoking <code>StatusPrinter</code> programmatically
+ from your code, you can instruct the configuration file to dump
+ status data. To achieve this, you need to set the <span
+ class="attr">debug</span> attribute of the <em>configuration</em>
+ element, i.e. the top-most element in the configuration file, as
+ shown below. Please note that this <span class="attr">debug</span>
+ attribute relates only to the status data. It does <em>not</em>
+ affect logback's configuration otherwise, in particuler with
+ respect to logger levels. (Put differently, no, the root logger
+ will <em>not</em> be set to DEBUG.)
+ </p>
+
+<em>Example 3.<span class="autoEx"/>: Basic configuration file using debug mode (logback-examples/src/main/java/chapter3/sample1.xml)</em>
+<div class="source"><pre><configuration <b>debug="true"</b>>
+
+ <appender name="STDOUT"
+ class="ch.qos.logback.core.ConsoleAppender">
+ <layout class="ch.qos.logback.classic.PatternLayout">
+ <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>
+ </layout>
+ </appender>
+
+ <root>
+ <level value="debug" />
+ <appender-ref ref="STDOUT" />
+ </root>
+</configuration></pre></div>
+
+ <p>Setting the <code>debug</code> attribute within the
+ <configuration> element will output status information, under
+ the assumption that
+ </p>
+ <ol>
+ <li>the configuration file is found</li>
+ <li>the configuration file is well-formed XML.</li>
+ </ol>
+
+ <p>If any of these two conditions is not fulfilled, the Joran
+ cannot interpret <code>debug</code> attribute since the
+ configuration file cannot be read. it follows that no status
+ information will be printed. If you would like to ensure that
+ status information is printed, then, as in <em>MyApp2</em>
+ application above, programmatically invoking
+ <code>StatusPrinter.print()</code> is your safest bet.
+ </p>
+
+ <!-- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -->
+ <!-- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -->
+ <!-- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -->
+ <!-- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -->
+ <!-- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -->
<h3>Invoking <code>JoranConfigurator</code> programmatically</h3>
@@ -377,7 +463,7 @@
one only needs to add an attribute to the main
<em>configuration</em> element in the configuration file, as shown
above:
- wec</p>
+ </p>
<em>Example 3.<span class="autoEx"/>: Basic configuration file using debug mode (logback-examples/src/main/java/chapter3/sample1.xml)</em>
<div class="source"><pre><configuration <b>debug="true"</b>>
@@ -414,15 +500,10 @@
16:18:23.687 [main] DEBUG chapter3.Foo - Did it again!
16:18:23.687 [main] INFO chapter3.MyApp2 - Exiting application.</pre></div>
- <p>At the end of this output, you can recognize the lines that were
- printed in the previous example. You should also notive the
- logback's internal messages based on <code>Status</code> objects,
- logback internal reporting mechanism. <code>Status</code> objects
- allow easy access to logback's internal state.
- </p>
-
- <h3>XML Syntax</h3>
+ <h2>
+ <a name="xml_syntax" href="#xml_syntax">XML Syntax</a>
+ </h2>
<p>To obtain these different logging behaviors we do not need to
recompile code. You can easily configure logging so that output is
directed to a UNIX Syslog daemon, or to a log visualizer, or forward
1
0

svn commit: r1758 - in logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic: . joran/action util
by noreply.ceki@qos.ch 16 Aug '08
by noreply.ceki@qos.ch 16 Aug '08
16 Aug '08
Author: ceki
Date: Sat Aug 16 19:31:39 2008
New Revision: 1758
Modified:
logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/BasicConfigurator.java
logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/LoggerContext.java
logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/joran/action/ConfigurationAction.java
logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/util/ContextInitializer.java
Log:
- minor changes improving status information during auto-configuration
Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/BasicConfigurator.java
==============================================================================
--- logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/BasicConfigurator.java (original)
+++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/BasicConfigurator.java Sat Aug 16 19:31:39 2008
@@ -35,7 +35,7 @@
public static void configure(LoggerContext lc) {
StatusManager sm = lc.getStatusManager();
if(sm != null) {
- sm.add(new InfoStatus("Setting up default configuration.", hiddenSingleton));
+ sm.add(new InfoStatus("Setting up default configuration.", lc));
}
ConsoleAppender<LoggingEvent> ca = new ConsoleAppender<LoggingEvent>();
ca.setContext(lc);
Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/LoggerContext.java
==============================================================================
--- logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/LoggerContext.java (original)
+++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/LoggerContext.java Sat Aug 16 19:31:39 2008
@@ -286,4 +286,9 @@
public void stop() {
started = false;
}
+
+ @Override
+ public String toString() {
+ return this.getClass().getName()+"["+getName()+"]";
+ }
}
Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/joran/action/ConfigurationAction.java
==============================================================================
--- logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/joran/action/ConfigurationAction.java (original)
+++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/joran/action/ConfigurationAction.java Sat Aug 16 19:31:39 2008
@@ -29,7 +29,7 @@
if (
(debugAttrib == null) || debugAttrib.equals("")
|| debugAttrib.equals("false") || debugAttrib.equals("null")) {
- addInfo("Ignoring " + INTERNAL_DEBUG_ATTR + " attribute.");
+ addInfo(INTERNAL_DEBUG_ATTR + " attribute not set");
} else {
//LoggerContext loggerContext = (LoggerContext) context;
//ConfiguratorBase.attachTemporaryConsoleAppender(context);
Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/util/ContextInitializer.java
==============================================================================
--- logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/util/ContextInitializer.java (original)
+++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/util/ContextInitializer.java Sat Aug 16 19:31:39 2008
@@ -99,7 +99,7 @@
private void statusOnResourceSearch(String resourceName, URL url) {
StatusManager sm = loggerContext.getStatusManager();
if (url == null) {
- sm.add(new InfoStatus("Could not find resource [" + resourceName + "]",
+ sm.add(new InfoStatus("Could NOT find resource [" + resourceName + "]",
loggerContext));
} else {
sm.add(new InfoStatus("Found resource [" + resourceName + "]",
1
0