📄 xhtmlelementtowikitranslator.java
字号:
if( !m_preStack.isPreMode() ) { print( " " ); } } else if( n.equals( "a" ) ) { if( !isIgnorableWikiMarkupLink( e ) ) { if( e.getChild( "IMG" ) != null ) { printImage( e ); } else { String ref = e.getAttributeValue( "href" ); if( ref == null ) { if( isUndefinedPageLink( e ) ) { m_out.print( "[" ); print( e ); m_out.print( "]" ); } else { print( e ); } } else { ref = trimLink( ref ); if( ref != null ) { if( ref.startsWith( "#" ) ) { print( e ); } else { Map augmentedWikiLinkAttributes = getAugmentedWikiLinkAttributes( e ); m_out.print( "[" ); print( e ); if( !e.getTextTrim().equalsIgnoreCase( ref ) ) { m_out.print( "|" ); print( ref ); if( !augmentedWikiLinkAttributes.isEmpty() ) { m_out.print( "|" ); String augmentedWikiLink = augmentedWikiLinkMapToString( augmentedWikiLinkAttributes ); m_out.print( augmentedWikiLink ); } } else if( !augmentedWikiLinkAttributes.isEmpty() ) { // If the ref has the same value as the text and also if there // are attributes, then just print: [ref|ref|attributes] . m_out.print( "|" + ref + "|" ); String augmentedWikiLink = augmentedWikiLinkMapToString( augmentedWikiLinkAttributes ); m_out.print( augmentedWikiLink ); } m_out.print( "]" ); } } } } } } else if( n.equals( "b" ) || n.equals("strong") ) { m_out.print( "__" ); print( e ); m_out.print( "__" ); } else if( n.equals( "i" ) || n.equals("em") || n.equals( "address" ) ) { m_out.print( "''" ); print( e ); m_out.print( "''" ); } else if( n.equals( "u" ) ) { m_out.print( "%%( text-decoration:underline; )" ); print( e ); m_out.print( "%%" ); } else if( n.equals( "strike" ) ) { m_out.print( "%%strike " ); print( e ); m_out.print( "%%" ); // NOTE: don't print a space before or after the double percents because that can break words into two. // For example: %%(color:red)ABC%%%%(color:green)DEF%% is different from %%(color:red)ABC%% %%(color:green)DEF%% } else if( n.equals( "sup" ) ) { m_out.print( "%%sup " ); print( e ); m_out.print( "%%" ); } else if( n.equals( "sub" ) ) { m_out.print( "%%sub " ); print( e ); m_out.print( "%%" ); } else if( n.equals("dl") ) { m_out.print( "\n" ); print( e ); // print a newline after the definition list. If we don't, // it may cause problems for the subsequent element. m_out.print( "\n" ); } else if( n.equals("dt") ) { m_out.print( ";" ); print( e ); } else if( n.equals("dd") ) { m_out.print( ":" ); print( e ); } else if( n.equals( "ul" ) ) { m_out.println(); m_liStack.push( "*" ); print( e ); m_liStack.pop(); } else if( n.equals( "ol" ) ) { m_out.println(); m_liStack.push( "#" ); print( e ); m_liStack.pop(); } else if( n.equals( "li" ) ) { m_out.print( m_liStack + " " ); print( e ); // The following line assumes that the XHTML has been "pretty-printed" // (newlines separate child elements from their parents). boolean lastListItem = base.indexOf( e ) == ( base.getContentSize() - 2 ); boolean sublistItem = m_liStack.toString().length() > 1; // only print a newline if this <li> element is not the last item within a sublist. if( !sublistItem || !lastListItem ) { m_out.println(); } } else if( n.equals( "pre" ) ) { m_out.print( "\n{{{\n" ); // start JSPWiki "code blocks" on its own line m_preStack.push(); print( e ); m_preStack.pop(); // print a newline before the closing braces for aesthetics and a newline after it // to avoid breaking any subsequent wiki markup that follows. m_out.print( "\n}}}\n" ); } else if( n.equals( "code" ) || n.equals( "tt" ) ) { m_out.print( "{{" ); m_preStack.push(); print( e ); m_preStack.pop(); m_out.print( "}}" ); // NOTE: don't print a newline after the closing brackets because if the Text is inside // a table or list, it would break it if there was a subsequent row or list item. } else if( n.equals( "img" ) ) { if( !isIgnorableWikiMarkupLink( e ) ) { m_out.print( "[" ); print( trimLink( e.getAttributeValue( "src" ) ) ); m_out.print( "]" ); } } else if( n.equals( "form" ) ) { // remove the hidden input where name="formname" since a new one will be generated again when the xhtml is rendered. Element formName = (Element)XPath.selectSingleNode( e, "INPUT[@name='formname']" ); if( formName != null ) { formName.detach(); } String name = e.getAttributeValue( "name" ); m_out.print( "\n[{FormOpen" ); if( name != null ) { m_out.print( " form='" + name + "'" ); } m_out.print( "}]\n" ); print( e ); m_out.print( "\n[{FormClose}]\n" ); } else if( n.equals( "input" ) ) { String type = e.getAttributeValue( "type" ); String name = e.getAttributeValue( "name" ); String value = e.getAttributeValue( "value" ); String checked = e.getAttributeValue( "checked" ); m_out.print( "[{FormInput" ); if( type != null ) { m_out.print( " type='" + type + "'" ); } if( name != null ) { // remove the "nbf_" that was prepended since new one will be generated again when the xhtml is rendered. if( name.startsWith( "nbf_" ) ) { name = name.substring( 4, name.length( )); } m_out.print( " name='" + name + "'" ); } if( value != null && !value.equals( "" ) ) { m_out.print( " value='" + value + "'" ); } if( checked != null ) { m_out.print( " checked='" + checked + "'" ); } m_out.print( "}]" ); print( e ); } else if( n.equals( "textarea" ) ) { String name = e.getAttributeValue( "name" ); String rows = e.getAttributeValue( "rows" ); String cols = e.getAttributeValue( "cols" ); m_out.print( "[{FormTextarea" ); if( name != null ) { if( name.startsWith( "nbf_" ) ) { name = name.substring( 4, name.length( )); } m_out.print( " name='" + name + "'" ); } if( rows != null ) { m_out.print( " rows='" + rows + "'" ); } if( cols != null ) { m_out.print( " cols='" + cols + "'" ); } m_out.print( "}]" ); print( e ); } else if( n.equals( "select" ) ) { String name = e.getAttributeValue( "name" ); m_out.print( "[{FormSelect" ); if( name != null ) { if( name.startsWith( "nbf_" ) ) { name = name.substring( 4, name.length( )); } m_out.print( " name='" + name + "'" ); } m_out.print( " value='" ); print( e ); m_out.print( "'}]" ); } else if( n.equals( "option" ) ) { // If this <option> element isn't the second child element within the parent <select> // element, then we need to print a semicolon as a separator. (The first child element // is expected to be a newline character which is at index of 0). if( base.indexOf( e ) != 1 ) { m_out.print( ";" ); } Attribute selected = e.getAttribute( "selected" ); if( selected != null ) { m_out.print( "*" ); } String value = e.getAttributeValue( "value" ); if( value != null ) { m_out.print( value ); } else { print( e ); } } else { print( e ); } } else { print( c ); } } } @SuppressWarnings("unchecked") private void printImage( Element base ) throws JDOMException { Element child = (Element)XPath.selectSingleNode( base, "TBODY/TR/TD/*" ); if( child == null ) { child = base; } Element img; String href; Map<Object,Object> map = new ForgetNullValuesLinkedHashMap(); if( child.getName().equals( "A" ) ) { img = child.getChild( "IMG" ); href = child.getAttributeValue( "href" ); } else { img = child; href = null; } if( img == null ) { return; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -