Moinmoin to Mediawiki:修订间差异
小 New page: 写了一个转化程序 <source lang="java"> /* * Main.java * * Created on 2007年5月12日, 下午1:31 * * To change this template, choose Tools | Template Manager * and open the t... |
小无编辑摘要 |
||
(未显示同一用户的2个中间版本) | |||
第1行: | 第1行: | ||
写了一个转化程序 | 写了一个转化程序,本程序的作用是将 moinmoin convert to mediawiki 。 | ||
<source lang="java"> | <source lang="java"> | ||
/* | /* | ||
* Main.java | * Main.java | ||
第14行: | 第16行: | ||
import java.io.BufferedInputStream; | import java.io.BufferedInputStream; | ||
import java.io.BufferedReader; | import java.io.BufferedReader; | ||
import java.io.FileReader; | |||
import java.io.IOException; | import java.io.IOException; | ||
import java.io.InputStream; | import java.io.InputStream; | ||
第48行: | 第51行: | ||
List <String> addDict= new Vector<String>(); | List <String> addDict= new Vector<String>(); | ||
List <String> oldDict= new Vector<String>(); | List <String> oldDict= new Vector<String>(); | ||
String cookie=" | String cookie="helpUserName=???;helpUserID=???;help_session=???"; | ||
private void addDict(String dict){ | private void addDict(String dict){ | ||
第153行: | 第156行: | ||
//删除注释 | //删除注释 | ||
text=text.replaceAll("\r\n#(.*)",""); | text=text.replaceAll("\r\n##(.*)",""); | ||
text=text.replaceAll("^#(.* | text=text.replaceAll("\r\n#format(.*)",""); | ||
text=text.replaceAll("\r\n#language(.*)",""); | |||
text=text.replaceAll("\r\n#pragma(.*)",""); | |||
text=text.replaceAll("^##(.*)\r\n",""); | |||
text=text.replaceAll("^#format(.*)\r\n",""); | |||
text=text.replaceAll("^#language(.*)\r\n",""); | |||
text=text.replaceAll("^#pragma(.*)\r\n",""); | |||
//替换#REDIRECT PDFPrinting => #REDIRECT [[PDFPrinting]] | |||
text=text.replaceAll("#REDIRECT (\\S*)","#REDIRECT "+"[["+ex+":$1]]"); | |||
text=text.replaceAll("#redirect (\\S*)","#REDIRECT "+"[["+ex+":$1]]"); | |||
//#refresh 0 https://wiki.ubuntu.com/ASUS_A3H_5010_Laptop_with_Ubuntu | |||
text=text.replaceAll("#REFRESH (.*?) (\\S*)","#REDIRECT "+"[["+ex+":$2]]"); | |||
text=text.replaceAll("#refresh (.*?) (\\S*)","#REDIRECT "+"[["+ex+":$2]]"); | |||
//删除主题 | //删除主题 | ||
text=text.replaceAll(".*TableOfContents.*",""); | text=text.replaceAll(".*TableOfContents.*",""); | ||
第191行: | 第207行: | ||
//link convert - __ * __ -> <u> * </u> | //link convert - __ * __ -> <u> * </u> | ||
text=text.replaceAll("__(.*?)__","<u>$1</u>"); | text=text.replaceAll("__(.*?)__","<u>$1</u>"); | ||
//link convert - {{{ * }}} -> <code><nowiki> * </nowiki></code> | //link convert - {{{ * }}} -> <code><nowiki> * </nowiki></code> | ||
text=text.replaceAll("\\{\\{\\{(.*?)\\}\\}\\}","<code><nowiki>$1</nowiki></code>"); | text=text.replaceAll("\\{\\{\\{(.*?)\\}\\}\\}","<code><nowiki>$1</nowiki></code>"); | ||
//link convert - \r\n {{{ * -> \r\n<pre><nowiki> * | |||
text=text.replaceAll("\r\n([ \\.]*?)\\{\\{\\{(.*)","\r\n<pre><nowiki>$2"); | |||
//link convert - {{{ * -> <pre><nowiki> * | //link convert - {{{ * -> <pre><nowiki> * | ||
text=text.replaceAll("\\{\\{\\{(.*)","<pre><nowiki>$1"); | text=text.replaceAll("\\{\\{\\{(.*)","\r\n<pre><nowiki>$1"); | ||
//link convert - * }}} -> * <\pre><\nowiki> | //link convert - * }}} -> * <\pre><\nowiki> | ||
text=text.replaceAll("(.*?)\\}\\}\\}","$1</nowiki></pre>"); | text=text.replaceAll("(.*?)\\}\\}\\}","$1</nowiki></pre>"); | ||
//CategoryHomepage =>[[category:"+ex+"]]; | //CategoryHomepage =>[[category:"+ex+"]]; | ||
text=text.replaceAll("Category(\\S*)","[[category:Category$1]]"); | text=text.replaceAll("Category(\\S*)","[[category:Category$1]]"); | ||
text=text.replaceAll("\r\n( *)","\r\n"); | |||
text=replaceUrl(text,turl,dict); | text=replaceUrl(text,turl,dict); | ||
text=tableConv(text); | text=tableConv(text); | ||
//[[xxx:http]] => [[http:]] | |||
text=text.replaceAll("\\[\\[(.*?):http(.*?)\\]\\]","[[http$2]]"); | |||
//[[xxx:ftp]] => [[ftp:]] | |||
text=text.replaceAll("\\[\\[(.*?):ftp(.*?)\\]\\]","[[ftp$2]]"); | |||
//[[https://wiki.ubuntu.com/*]] => [[UbuntuWiki:]] | |||
text=text.replaceAll("\\[\\[https://wiki\\.ubuntu\\.com/(.*?)\\]\\]","[[UbuntuWiki:$1]]"); | |||
//[[https://help.ubuntu.com/community/*]] => [[UbuntuHelp:]] | |||
text=text.replaceAll("\\[\\[https://help\\.ubuntu\\.com/community/(.*?)\\]\\]","[[UbuntuHelp:$1]]"); | |||
String foot="\r\n[[category:"+ex+"]]"; | String foot="\r\n[[category:"+ex+"]]"; | ||
if (text.trim().startsWith("#REDIRECT")){ | |||
System.out.println(dict + " is redirect :"+text.trim()); | |||
return text+head+foot; | |||
} | |||
if (text.trim().length()<10){ | if (text.trim().length()<10){ | ||
System.out.println(dict + "is short :"+text); | |||
return ""; | return ""; | ||
} | } | ||
return head+text+foot; | return head+text+foot; | ||
} | } | ||
public String replaceList(String text){ | public String replaceList(String text){ | ||
text=text.replaceAll("\r\n \\. (.*?)","\r\n* $1"); | |||
text=text.replaceAll("\r\n \\. (.*?)","\r\n** $1"); | |||
text=text.replaceAll("\r\n \\. (.*?)","\r\n*** $1"); | |||
text=text.replaceAll("\r\n \\. (.*?)","\r\n**** $1"); | |||
text=text.replaceAll("\r\n \\. (.*?)","\r\n***** $1"); | |||
text=text.replaceAll("\r\n \\. (.*?)","\r\n****** $1"); | |||
text=text.replaceAll("\r\n \\*(.*?)","\r\n*$1"); | text=text.replaceAll("\r\n \\*(.*?)","\r\n*$1"); | ||
text=text.replaceAll("\r\n \\*(.*?)","\r\n**$1"); | text=text.replaceAll("\r\n \\*(.*?)","\r\n**$1"); | ||
第219行: | 第261行: | ||
text=text.replaceAll("\r\n \\*(.*?)","\r\n*****$1"); | text=text.replaceAll("\r\n \\*(.*?)","\r\n*****$1"); | ||
text=text.replaceAll("\r\n \\*(.*?)","\r\n******$1"); | text=text.replaceAll("\r\n \\*(.*?)","\r\n******$1"); | ||
// text=text.replaceAll("\r\n \\. (.*?)","\r\n#: $1"); | |||
// text=text.replaceAll("\r\n \\. (.*?)","\r\n##: $1"); | |||
// text=text.replaceAll("\r\n \\. (.*?)","\r\n###: $1"); | |||
// text=text.replaceAll("\r\n \\. (.*?)","\r\n####: $1"); | |||
// text=text.replaceAll("\r\n \\. (.*?)","\r\n#####: $1"); | |||
// text=text.replaceAll("\r\n \\. (.*?)","\r\n######: $1"); | |||
// text=text.replaceAll("\r\n \\*(.*?)","\r\n#$1"); | |||
// text=text.replaceAll("\r\n \\*(.*?)","\r\n##$1"); | |||
// text=text.replaceAll("\r\n \\*(.*?)","\r\n###$1"); | |||
// text=text.replaceAll("\r\n \\*(.*?)","\r\n####$1"); | |||
// text=text.replaceAll("\r\n \\*(.*?)","\r\n#####$1"); | |||
// text=text.replaceAll("\r\n \\*(.*?)","\r\n######$1"); | |||
for (int i=1;i<20;i++){ | for (int i=1;i<20;i++){ | ||
// text=text.replaceAll("\r\n "+i+"\\.(.*?)","\r\n#$1"); | |||
// text=text.replaceAll("\r\n "+i+"\\.(.*?)","\r\n##$1"); | |||
// text=text.replaceAll("\r\n "+i+"\\.(.*?)","\r\n###$1"); | |||
// text=text.replaceAll("\r\n "+i+"\\.(.*?)","\r\n####$1"); | |||
// text=text.replaceAll("\r\n "+i+"\\.(.*?)","\r\n#####$1"); | |||
// text=text.replaceAll("\r\n "+i+"\\.(.*?)","\r\n######$1"); | |||
text=text.replaceAll("\r\n "+i+"\\.(.*?)","\r\n*$1"); | |||
text=text.replaceAll("\r\n "+i+"\\.(.*?)","\r\n**$1"); | |||
text=text.replaceAll("\r\n "+i+"\\.(.*?)","\r\n***$1"); | |||
text=text.replaceAll("\r\n "+i+"\\.(.*?)","\r\n****$1"); | |||
text=text.replaceAll("\r\n "+i+"\\.(.*?)","\r\n*****$1"); | |||
text=text.replaceAll("\r\n "+i+"\\.(.*?)","\r\n******$1"); | |||
} | } | ||
return text; | return text; | ||
第271行: | 第332行: | ||
if (! start){ | if (! start){ | ||
start=true; | start=true; | ||
block="{|border=\"1\" cellspacing=\"0\"\r\n"+ | String str=line.substring(1,line.length()-2); | ||
str=str.replaceAll("<bgcolor.*?>",""); | |||
str=str.replaceAll("<style.*?>",""); | |||
block="{|border=\"1\" cellspacing=\"0\"\r\n"+str; | |||
}else{ | }else{ | ||
block=block+"\r\n|-\r\n"+ | String str=line.substring(1,line.length()-2); | ||
str=str.replaceAll("<bgcolor.*?>",""); | |||
str=str.replaceAll("<style.*?>",""); | |||
block=block+"\r\n|-\r\n"+str; | |||
} | } | ||
}else{ | }else{ | ||
第297行: | 第364行: | ||
StringBuffer sb; | StringBuffer sb; | ||
if (html.length()<5){ | if (html.length()<5){ | ||
System.out.println(dict+" is short | System.out.println(dict+" is short:"+html); | ||
return; | return; | ||
} | } | ||
// if (html.length()<300){ | |||
// if (html.toUpperCase().trim().indexOf("REFRESH")>0) { | |||
// System.out.println(dict+" is REFRESH."); | |||
// return; | |||
// } | |||
// if (html.toUpperCase().trim().indexOf("REDIRECT")>0) { | |||
// System.out.println(dict+" is REDIRECT."); | |||
// return; | |||
// } | |||
// } | |||
String ex="UbuntuHelp"; | String ex="UbuntuHelp"; | ||
if (surl.startsWith("https://wiki")){ | if (surl.startsWith("https://wiki")){ | ||
第352行: | 第419行: | ||
from=sb.substring(start,end); | from=sb.substring(start,end); | ||
}catch(Exception ex0){ | }catch(Exception ex0){ | ||
System.out.println(dict+" error!"); | System.out.println(dict+" error,please set cookie!"); | ||
return; | return; | ||
} | } | ||
第460行: | 第527行: | ||
public void start() throws IOException{ | public void start() throws IOException{ | ||
clearDict(); | clearDict(); | ||
// String dict="community/"; | |||
// String out = getUrl("https://help.ubuntu.com/"+dict+"?action=raw",dict); | |||
// getDicts(out); | |||
// putText(dict,out,"https://help.ubuntu.com/community/"); | |||
URL url=new URL("https://help.ubuntu.com/community/TitleIndex"); | |||
InputStream in=url.openConnection().getInputStream(); | |||
BufferedReader read=new BufferedReader(new InputStreamReader(in)); | |||
StringBuffer sb=new StringBuffer(); | |||
while (true){ | |||
String line=read.readLine(); | |||
if (line==null) break; | |||
sb.append(line+"\r\n"); | |||
} | |||
String html=sb.substring(sb.indexOf("<a name=\"3\">"),sb.indexOf("<a name=\"%5b\">")); | |||
Pattern pattern= Pattern.compile("<a href=\"/community/(.*?)\">"); | |||
Matcher matcher=pattern.matcher(html); | |||
while(matcher.find()) { | |||
String input=matcher.group(1); | |||
addDict(input); | |||
} | |||
String dict; | |||
String out; | |||
while (true){ | while (true){ | ||
第543行: | 第632行: | ||
// String out=tableConv("dddd\r\n||xxx||nnn||ddd||\r\n||dd||xxdee||dd||\r\nxdd"); | // String out=tableConv("dddd\r\n||xxx||nnn||ddd||\r\n||dd||xxdee||dd||\r\nxdd"); | ||
// System.out.println(out); | // System.out.println(out); | ||
// String text="#title User Documentation\r\n##Please discuss major/structural changes to this page on the Documentation team mailing list at: http://lists.ubuntu.com/mailman/listinfo/ubuntu-doc\r\n##If you want to get involved with editing and organising the Wiki please visit DocumentationTeam.\r\n## This page is designed to remain mostly static - make and propose changes to the pages that are linked to from this page\r\n## For help on contributing to the wiki, see the WikiGuide\r\n||<tablestyl"; | |||
// text=text.replaceAll("\r\n#(.*)",""); | |||
// text=text.replaceAll("^#(.*?)\r\n",""); | |||
// System.out.println(text); | |||
String text="sss\r\ndddf{{{dxx\r\n}}}\r\n . {{{ddd}}}\r\n .{{{ddd}}}\r\n{{{de}}}"; | |||
//link convert - \r\n {{{ * -> \r\n<pre><nowiki> * | |||
text=text.replaceAll("\r\n([ \\.]*?)\\{\\{\\{(.*)","\r\n<pre><nowiki>$2"); | |||
//link convert - {{{ * -> <pre><nowiki> * | |||
// System.out.println(text); | |||
// text=text.replaceAll("\r\n([ \\.]*?)\\{\\{\\{(.*)","<pre><nowiki>$2"); | |||
//link convert - {{{ * -> <pre><nowiki> * | |||
text=text.replaceAll("\\{\\{\\{(.*)","\r\n<pre><nowiki>$1"); | |||
//link convert - * }}} -> * <\pre><\nowiki> | |||
text=text.replaceAll("(.*?)\\}\\}\\}","$1</nowiki></pre>"); | |||
System.out.println(text); | System.out.println(text); | ||
// String url="http://bingniu.3322.org/mywiki/VNCOverSSH"; | |||
// String out=getUrl(url+"?action=raw","UbuntuManual"); | |||
// System.out.println(out); | |||
// BufferedReader read=new BufferedReader(new FileReader("/home/wangpian/a1.txt")); | |||
// String s=""; | |||
// StringBuffer str=new StringBuffer(); | |||
// while (true){ | |||
// s=read.readLine(); | |||
// if (s==null)break; | |||
// str.append(s+"\r\n"); | |||
// } | |||
// s=str.toString(); | |||
// s=s.replaceAll("\\[\\[\\[.*?\\]\\]\\]",""); | |||
// | |||
// System.out.println(s.replaceAll("\\[\\[UbuntuHelp(.*?)\\|(.*?)\\]\\]","$2")); | |||
} | } | ||
第559行: | 第680行: | ||
try { | try { | ||
// main.test(); | // main.test(); | ||
main.start(); | |||
// main.wikistart(); | |||
}catch (Exception ex){ | }catch (Exception ex){ | ||
ex.printStackTrace(); | ex.printStackTrace(); |
2007年5月24日 (四) 11:17的最新版本
写了一个转化程序,本程序的作用是将 moinmoin convert to mediawiki 。
<source lang="java">
/*
* Main.java * * Created on 2007年5月12日, 下午1:31 * * To change this template, choose Tools | Template Manager * and open the template in the editor. */
package wiki;
import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.net.URLEncoder; import java.security.GeneralSecurityException; import java.security.Security; import java.security.cert.X509Certificate; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Vector; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSession; import javax.net.ssl.X509TrustManager;
/**
* * @author oneleaf */
public class Main {
List <String> addDict= new Vector<String>(); List <String> oldDict= new Vector<String>(); String cookie="helpUserName=???;helpUserID=???;help_session=???"; private void addDict(String dict){ String str=dict.trim(); if (dict.startsWith("/")){ str=dict.substring(1); }else if (dict.indexOf("#")>0){ str=dict.substring(0,dict.indexOf("#")); }else if (dict.indexOf("?")>0){ str=dict.substring(0,dict.indexOf("?")); }else if (dict.startsWith("./")){ str=dict.substring(2); }else if (dict.startsWith("../")){ str=dict.substring(3); } if (str.toLowerCase().indexOf("team")>0) return; if (str.trim().length()==0) return; //../CommandLine if (oldDict.contains(str)) return; if (addDict.contains(str)) return; addDict.add(str); } private void delDict(String dict){ addDict.remove(dict); oldDict.add(dict); } private void clearDict(){ addDict.clear(); oldDict.clear(); } private void getDicts(String html){ Pattern pattern= Pattern.compile("\\[UbuntuHelp:(.*?)\\]"); Matcher matcher=pattern.matcher(html); while(matcher.find()) { String line=matcher.group(1); if (line.indexOf("|")>0){ addDict(line.substring(0,line.indexOf("|"))); }else{ addDict(line); } } } /** Creates a new instance of Main */ public Main() { SSLContext sslContext = null; try { sslContext = SSLContext.getInstance("TLS"); X509TrustManager[] xtmArray = new X509TrustManager[] { xtm }; sslContext.init(null, xtmArray, new java.security.SecureRandom()); } catch(GeneralSecurityException gse) { } if(sslContext != null) { HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory()); } HttpsURLConnection.setDefaultHostnameVerifier(hnv); } private X509TrustManager xtm = new X509TrustManager() { public void checkClientTrusted(X509Certificate[] chain, String authType) {} public void checkServerTrusted(X509Certificate[] chain, String authType) {} public X509Certificate[] getAcceptedIssuers() { return null; } }; private HostnameVerifier hnv = new HostnameVerifier() { public boolean verify(String hostname, SSLSession session) { return true; } }; public String getUrl(String urladdress,String dict) throws IOException{ URL url=new URL(urladdress); InputStream in=url.openConnection().getInputStream(); BufferedReader read=new BufferedReader(new InputStreamReader(in)); StringBuffer sb=new StringBuffer(); while (true){ String line=read.readLine(); if (line==null) break; sb.append(line+"\r\n"); } return moin2wm(sb.toString(),urladdress,dict); } public String moin2wm(String html,String url,String dict) throws UnsupportedEncodingException{ String text=html; String ex="UbuntuHelp"; String turl="https://help.ubuntu.com/community/"; if (url.startsWith("https://wiki")){ ex="UbuntuWiki"; turl="https://wiki.ubuntu.com/"; }
String head="
文章出处: |
{{#if: | ["+url.substring(0,url.indexOf("?"))+" {{{2}}}] | "+url.substring(0,url.indexOf("?"))+" }} |
\r\n
点击翻译: |
English {{#ifexist: {{#if: "+ex+":"+dict+" | "+ex+":"+dict+" | {{#if: | :}}Moinmoin to Mediawiki}}/af | • {{#if: "+ex+":"+dict+"|Afrikaans| [[::Moinmoin to Mediawiki/af|Afrikaans]]}}|}} {{#ifexist: {{#if: "+ex+":"+dict+" | "+ex+":"+dict+" | {{#if: | :}}Moinmoin to Mediawiki}}/ar | • {{#if: "+ex+":"+dict+"|العربية| [[::Moinmoin to Mediawiki/ar|العربية]]}}|}} {{#ifexist: {{#if: "+ex+":"+dict+" | "+ex+":"+dict+" | {{#if: | :}}Moinmoin to Mediawiki}}/az | • {{#if: "+ex+":"+dict+"|azərbaycanca| [[::Moinmoin to Mediawiki/az|azərbaycanca]]}}|}} {{#ifexist: {{#if: "+ex+":"+dict+" | "+ex+":"+dict+" | {{#if: | :}}Moinmoin to Mediawiki}}/bcc | • {{#if: "+ex+":"+dict+"|جهلسری بلوچی| [[::Moinmoin to Mediawiki/bcc|جهلسری بلوچی]]}}|}} {{#ifexist: {{#if: "+ex+":"+dict+" | "+ex+":"+dict+" | {{#if: | :}}Moinmoin to Mediawiki}}/bg | • {{#if: "+ex+":"+dict+"|български| [[::Moinmoin to Mediawiki/bg|български]]}}|}} {{#ifexist: {{#if: "+ex+":"+dict+" | "+ex+":"+dict+" | {{#if: | :}}Moinmoin to Mediawiki}}/br | • {{#if: "+ex+":"+dict+"|brezhoneg| [[::Moinmoin to Mediawiki/br|brezhoneg]]}}|}} {{#ifexist: {{#if: "+ex+":"+dict+" | "+ex+":"+dict+" | {{#if: | :}}Moinmoin to Mediawiki}}/ca | • {{#if: "+ex+":"+dict+"|català| [[::Moinmoin to Mediawiki/ca|català]]}}|}} {{#ifexist: {{#if: "+ex+":"+dict+" | "+ex+":"+dict+" | {{#if: | :}}Moinmoin to Mediawiki}}/cs | • {{#if: "+ex+":"+dict+"|čeština| [[::Moinmoin to Mediawiki/cs|čeština]]}}|}} {{#ifexist: {{#if: "+ex+":"+dict+" | "+ex+":"+dict+" | {{#if: | :}}Moinmoin to Mediawiki}}/de | • {{#if: "+ex+":"+dict+"|Deutsch| [[::Moinmoin to Mediawiki/de|Deutsch]]}}|}} {{#ifexist: {{#if: "+ex+":"+dict+" | "+ex+":"+dict+" | {{#if: | :}}Moinmoin to Mediawiki}}/el | • {{#if: "+ex+":"+dict+"|Ελληνικά| [[::Moinmoin to Mediawiki/el|Ελληνικά]]}}|}} {{#ifexist: {{#if: "+ex+":"+dict+" | "+ex+":"+dict+" | {{#if: | :}}Moinmoin to Mediawiki}}/es | • {{#if: "+ex+":"+dict+"|español| [[::Moinmoin to Mediawiki/es|español]]}}|}} {{#ifexist: {{#if: "+ex+":"+dict+" | "+ex+":"+dict+" | {{#if: | :}}Moinmoin to Mediawiki}}/fa | • {{#if: "+ex+":"+dict+"|فارسی| [[::Moinmoin to Mediawiki/fa|فارسی]]}}|}} {{#ifexist: {{#if: "+ex+":"+dict+" | "+ex+":"+dict+" | {{#if: | :}}Moinmoin to Mediawiki}}/fi | • {{#if: "+ex+":"+dict+"|suomi| [[::Moinmoin to Mediawiki/fi|suomi]]}}|}} {{#ifexist: {{#if: "+ex+":"+dict+" | "+ex+":"+dict+" | {{#if: | :}}Moinmoin to Mediawiki}}/fr | • {{#if: "+ex+":"+dict+"|français| [[::Moinmoin to Mediawiki/fr|français]]}}|}} {{#ifexist: {{#if: "+ex+":"+dict+" | "+ex+":"+dict+" | {{#if: | :}}Moinmoin to Mediawiki}}/gu | • {{#if: "+ex+":"+dict+"|ગુજરાતી| [[::Moinmoin to Mediawiki/gu|ગુજરાતી]]}}|}} {{#ifexist: {{#if: "+ex+":"+dict+" | "+ex+":"+dict+" | {{#if: | :}}Moinmoin to Mediawiki}}/he | • {{#if: "+ex+":"+dict+"|עברית| [[::Moinmoin to Mediawiki/he|עברית]]}}|}} {{#ifexist: {{#if: "+ex+":"+dict+" | "+ex+":"+dict+" | {{#if: | :}}Moinmoin to Mediawiki}}/hu | • {{#if: "+ex+":"+dict+"|magyar| [[::Moinmoin to Mediawiki/hu|magyar]]}}|}} {{#ifexist: {{#if: "+ex+":"+dict+" | "+ex+":"+dict+" | {{#if: | :}}Moinmoin to Mediawiki}}/id | • {{#if: "+ex+":"+dict+"|Bahasa Indonesia| [[::Moinmoin to Mediawiki/id|Bahasa Indonesia]]}}|}} {{#ifexist: {{#if: "+ex+":"+dict+" | "+ex+":"+dict+" | {{#if: | :}}Moinmoin to Mediawiki}}/it | • {{#if: "+ex+":"+dict+"|italiano| [[::Moinmoin to Mediawiki/it|italiano]]}}|}} {{#ifexist: {{#if: "+ex+":"+dict+" | "+ex+":"+dict+" | {{#if: | :}}Moinmoin to Mediawiki}}/ja | • {{#if: "+ex+":"+dict+"|日本語| [[::Moinmoin to Mediawiki/ja|日本語]]}}|}} {{#ifexist: {{#if: "+ex+":"+dict+" | "+ex+":"+dict+" | {{#if: | :}}Moinmoin to Mediawiki}}/ko | • {{#if: "+ex+":"+dict+"|한국어| [[::Moinmoin to Mediawiki/ko|한국어]]}}|}} {{#ifexist: {{#if: "+ex+":"+dict+" | "+ex+":"+dict+" | {{#if: | :}}Moinmoin to Mediawiki}}/ksh | • {{#if: "+ex+":"+dict+"|Ripoarisch| [[::Moinmoin to Mediawiki/ksh|Ripoarisch]]}}|}} {{#ifexist: {{#if: "+ex+":"+dict+" | "+ex+":"+dict+" | {{#if: | :}}Moinmoin to Mediawiki}}/mr | • {{#if: "+ex+":"+dict+"|मराठी| [[::Moinmoin to Mediawiki/mr|मराठी]]}}|}} {{#ifexist: {{#if: "+ex+":"+dict+" | "+ex+":"+dict+" | {{#if: | :}}Moinmoin to Mediawiki}}/ms | • {{#if: "+ex+":"+dict+"|Bahasa Melayu| [[::Moinmoin to Mediawiki/ms|Bahasa Melayu]]}}|}} {{#ifexist: {{#if: "+ex+":"+dict+" | "+ex+":"+dict+" | {{#if: | :}}Moinmoin to Mediawiki}}/nl | • {{#if: "+ex+":"+dict+"|Nederlands| [[::Moinmoin to Mediawiki/nl|Nederlands]]}}|}} {{#ifexist: {{#if: "+ex+":"+dict+" | "+ex+":"+dict+" | {{#if: | :}}Moinmoin to Mediawiki}}/no | • {{#if: "+ex+":"+dict+"|norsk| [[::Moinmoin to Mediawiki/no|norsk]]}}|}} {{#ifexist: {{#if: "+ex+":"+dict+" | "+ex+":"+dict+" | {{#if: | :}}Moinmoin to Mediawiki}}/oc | • {{#if: "+ex+":"+dict+"|occitan| [[::Moinmoin to Mediawiki/oc|occitan]]}}|}} {{#ifexist: {{#if: "+ex+":"+dict+" | "+ex+":"+dict+" | {{#if: | :}}Moinmoin to Mediawiki}}/pl | • {{#if: "+ex+":"+dict+"|polski| [[::Moinmoin to Mediawiki/pl|polski]]}}|}} {{#ifexist: {{#if: "+ex+":"+dict+" | "+ex+":"+dict+" | {{#if: | :}}Moinmoin to Mediawiki}}/pt | • {{#if: "+ex+":"+dict+"|português| [[::Moinmoin to Mediawiki/pt|português]]}}|}} {{#ifexist: {{#if: "+ex+":"+dict+" | "+ex+":"+dict+" | {{#if: | :}}Moinmoin to Mediawiki}}/ro | • {{#if: "+ex+":"+dict+"|română| [[::Moinmoin to Mediawiki/ro|română]]}}|}} {{#ifexist: {{#if: "+ex+":"+dict+" | "+ex+":"+dict+" | {{#if: | :}}Moinmoin to Mediawiki}}/ru | • {{#if: "+ex+":"+dict+"|русский| [[::Moinmoin to Mediawiki/ru|русский]]}}|}} {{#ifexist: {{#if: "+ex+":"+dict+" | "+ex+":"+dict+" | {{#if: | :}}Moinmoin to Mediawiki}}/si | • {{#if: "+ex+":"+dict+"|සිංහල| [[::Moinmoin to Mediawiki/si|සිංහල]]}}|}} {{#ifexist: {{#if: "+ex+":"+dict+" | "+ex+":"+dict+" | {{#if: | :}}Moinmoin to Mediawiki}}/sq | • {{#if: "+ex+":"+dict+"|shqip| [[::Moinmoin to Mediawiki/sq|shqip]]}}|}} {{#ifexist: {{#if: "+ex+":"+dict+" | "+ex+":"+dict+" | {{#if: | :}}Moinmoin to Mediawiki}}/sr | • {{#if: "+ex+":"+dict+"|српски / srpski| [[::Moinmoin to Mediawiki/sr|српски / srpski]]}}|}} {{#ifexist: {{#if: "+ex+":"+dict+" | "+ex+":"+dict+" | {{#if: | :}}Moinmoin to Mediawiki}}/sv | • {{#if: "+ex+":"+dict+"|svenska| [[::Moinmoin to Mediawiki/sv|svenska]]}}|}} {{#ifexist: {{#if: "+ex+":"+dict+" | "+ex+":"+dict+" | {{#if: | :}}Moinmoin to Mediawiki}}/th | • {{#if: "+ex+":"+dict+"|ไทย| [[::Moinmoin to Mediawiki/th|ไทย]]}}|}} {{#ifexist: {{#if: "+ex+":"+dict+" | "+ex+":"+dict+" | {{#if: | :}}Moinmoin to Mediawiki}}/tr | • {{#if: "+ex+":"+dict+"|Türkçe| [[::Moinmoin to Mediawiki/tr|Türkçe]]}}|}} {{#ifexist: {{#if: "+ex+":"+dict+" | "+ex+":"+dict+" | {{#if: | :}}Moinmoin to Mediawiki}}/vi | • {{#if: "+ex+":"+dict+"|Tiếng Việt| [[::Moinmoin to Mediawiki/vi|Tiếng Việt]]}}|}} {{#ifexist: {{#if: "+ex+":"+dict+" | "+ex+":"+dict+" | {{#if: | :}}Moinmoin to Mediawiki}}/yue | • {{#if: "+ex+":"+dict+"|粵語| [[::Moinmoin to Mediawiki/yue|粵語]]}}|}} {{#ifexist: {{#if: "+ex+":"+dict+" | "+ex+":"+dict+" | {{#if: | :}}Moinmoin to Mediawiki}}/zh | • {{#if: "+ex+":"+dict+"|中文| [[::Moinmoin to Mediawiki/zh|中文]]}}|}} {{#ifexist: {{#if: "+ex+":"+dict+" | "+ex+":"+dict+" | {{#if: | :}}Moinmoin to Mediawiki}}/zh-hans | • {{#if: "+ex+":"+dict+"|中文(简体)| [[::Moinmoin to Mediawiki/zh-hans|中文(简体)]]}}|}} {{#ifexist: {{#if: "+ex+":"+dict+" | "+ex+":"+dict+" | {{#if: | :}}Moinmoin to Mediawiki}}/zh-hant | • {{#if: "+ex+":"+dict+"|中文(繁體)| [[::Moinmoin to Mediawiki/zh-hant|中文(繁體)]]}}|}} |
{{#ifeq:"+ex+":"+dict+"|:Moinmoin to Mediawiki|请不要直接编辑翻译本页,本页将定期与来源同步。}} |
{{#ifexist: :Moinmoin to Mediawiki/zh | | {{#ifexist: Moinmoin to Mediawiki/zh | | {{#ifeq: {{#titleparts:Moinmoin to Mediawiki|1|-1|}} | zh | | }} }} }} {{#ifeq: {{#titleparts:Moinmoin to Mediawiki|1|-1|}} | zh | | }} \r\n";
//删除注释 text=text.replaceAll("\r\n##(.*)",""); text=text.replaceAll("\r\n#format(.*)",""); text=text.replaceAll("\r\n#language(.*)",""); text=text.replaceAll("\r\n#pragma(.*)",""); text=text.replaceAll("^##(.*)\r\n",""); text=text.replaceAll("^#format(.*)\r\n",""); text=text.replaceAll("^#language(.*)\r\n",""); text=text.replaceAll("^#pragma(.*)\r\n",""); //替换#REDIRECT PDFPrinting => #REDIRECT PDFPrinting text=text.replaceAll("#REDIRECT (\\S*)","#REDIRECT "+""+ex+":$1"); text=text.replaceAll("#redirect (\\S*)","#REDIRECT "+""+ex+":$1"); //#refresh 0 https://wiki.ubuntu.com/ASUS_A3H_5010_Laptop_with_Ubuntu text=text.replaceAll("#REFRESH (.*?) (\\S*)","#REDIRECT "+""+ex+":$2"); text=text.replaceAll("#refresh (.*?) (\\S*)","#REDIRECT "+""+ex+":$2"); //删除主题 text=text.replaceAll(".*TableOfContents.*",""); //标题从二开始 text=text.replaceAll("= (.*?) =","== $1 =="); //转化List text=replaceList(text); //BR ->
text=text.replaceAll("\\[\\[BR\\]\\]","
"); //link convert superscripted - ^ * ^ -> * text=text.replaceAll("\\^(.*)\\^","$1"); //link convert subscripted - ,, * ,, -> * text=text.replaceAll(",,(.*?),,","$1"); //link convert - [" * "] -> UbuntuHelp: * text=text.replaceAll("\\[\"(.*?)\"\\]",""+ex+":$1"); //link convert - [# * ] -> * text=text.replaceAll("\\[#(.*?)\\]","$1"); //link convert - [: \ * : * ] -> * text=text.replaceAll("\\[:\\\\(.*?):(.*?)\\]","$2"); //link convert - [: * : * ] -> * text=text.replaceAll("\\[:(.*?):(.*?)\\]","$2"); //link convert - [: * ] -> UbuntuHelp: * text=text.replaceAll("\\[:(.*?)\\]",""+ex+":$1"); //link convert - wiki:cat -> UbuntuWiki:cat text=text.replaceAll(" wiki:(\\S*)"," UbuntuWiki:$1"); text=text.replaceAll("\r\nwiki:(\\S*)","\r\nUbuntuWiki:$1"); //link convert - [wiki:cat * ] -> * text=text.replaceAll("\\[wiki:(.*?)\\ (.*?)\\]","$2"); //link convert - [wiki:cat * ] -> * text=text.replaceAll("\\[wiki:(.*?)\\]","UbuntuWiki:$1"); //link convert - [UbuntuWiki:\*] -> [UbuntuWiki:dict\*] text=text.replaceAll("\\[UbuntuWiki:\\\\(.*?)\\]","[UbuntuWiki:"+dict+"\\$1]"); //link convert - [UbuntuHelp:\*] -> [UbuntuHelp:dict\*] text=text.replaceAll("\\[UbuntuHelp:\\\\(.*?)\\]","[UbuntuHelp:"+dict+"\\$1]"); //link convert - __ * __ -> * text=text.replaceAll("__(.*?)__","$1");
//link convert - {{{ * }}} ->*
text=text.replaceAll("\\{\\{\\{(.*?)\\}\\}\\}","$1
");
//link convert - \r\n {{{ * -> \r\n
* text=text.replaceAll("\r\n([ \\.]*?)\\{\\{\\{(.*)","\r\n<pre><nowiki>$2"); //link convert - {{{ * -> <pre><nowiki> * text=text.replaceAll("\\{\\{\\{(.*)","\r\n<pre><nowiki>$1"); //link convert - * }}} -> * <\pre><\nowiki> text=text.replaceAll("(.*?)\\}\\}\\}","$1
");
//CategoryHomepage =>; text=text.replaceAll("Category(\\S*)","");
text=text.replaceAll("\r\n( *)","\r\n"); text=replaceUrl(text,turl,dict); text=tableConv(text); //xxx:http => http: text=text.replaceAll("\\[\\[(.*?):http(.*?)\\]\\]","http$2"); //xxx:ftp => ftp: text=text.replaceAll("\\[\\[(.*?):ftp(.*?)\\]\\]","ftp$2");
//[[1]] => UbuntuWiki: text=text.replaceAll("\\[\\[2]\\]","UbuntuWiki:$1"); //[[3]] => UbuntuHelp: text=text.replaceAll("\\[\\[4]\\]","UbuntuHelp:$1"); String foot="\r\n"; if (text.trim().startsWith("#REDIRECT")){ System.out.println(dict + " is redirect :"+text.trim()); return text+head+foot; } if (text.trim().length()<10){ System.out.println(dict + "is short :"+text); return ""; } return head+text+foot; } public String replaceList(String text){ text=text.replaceAll("\r\n \\. (.*?)","\r\n* $1"); text=text.replaceAll("\r\n \\. (.*?)","\r\n** $1"); text=text.replaceAll("\r\n \\. (.*?)","\r\n*** $1"); text=text.replaceAll("\r\n \\. (.*?)","\r\n**** $1"); text=text.replaceAll("\r\n \\. (.*?)","\r\n***** $1"); text=text.replaceAll("\r\n \\. (.*?)","\r\n****** $1"); text=text.replaceAll("\r\n \\*(.*?)","\r\n*$1"); text=text.replaceAll("\r\n \\*(.*?)","\r\n**$1"); text=text.replaceAll("\r\n \\*(.*?)","\r\n***$1"); text=text.replaceAll("\r\n \\*(.*?)","\r\n****$1"); text=text.replaceAll("\r\n \\*(.*?)","\r\n*****$1"); text=text.replaceAll("\r\n \\*(.*?)","\r\n******$1");
// text=text.replaceAll("\r\n \\. (.*?)","\r\n#: $1"); // text=text.replaceAll("\r\n \\. (.*?)","\r\n##: $1"); // text=text.replaceAll("\r\n \\. (.*?)","\r\n###: $1"); // text=text.replaceAll("\r\n \\. (.*?)","\r\n####: $1"); // text=text.replaceAll("\r\n \\. (.*?)","\r\n#####: $1"); // text=text.replaceAll("\r\n \\. (.*?)","\r\n######: $1"); // text=text.replaceAll("\r\n \\*(.*?)","\r\n#$1"); // text=text.replaceAll("\r\n \\*(.*?)","\r\n##$1"); // text=text.replaceAll("\r\n \\*(.*?)","\r\n###$1"); // text=text.replaceAll("\r\n \\*(.*?)","\r\n####$1"); // text=text.replaceAll("\r\n \\*(.*?)","\r\n#####$1"); // text=text.replaceAll("\r\n \\*(.*?)","\r\n######$1");
for (int i=1;i<20;i++){
// text=text.replaceAll("\r\n "+i+"\\.(.*?)","\r\n#$1"); // text=text.replaceAll("\r\n "+i+"\\.(.*?)","\r\n##$1"); // text=text.replaceAll("\r\n "+i+"\\.(.*?)","\r\n###$1"); // text=text.replaceAll("\r\n "+i+"\\.(.*?)","\r\n####$1"); // text=text.replaceAll("\r\n "+i+"\\.(.*?)","\r\n#####$1"); // text=text.replaceAll("\r\n "+i+"\\.(.*?)","\r\n######$1");
text=text.replaceAll("\r\n "+i+"\\.(.*?)","\r\n*$1"); text=text.replaceAll("\r\n "+i+"\\.(.*?)","\r\n**$1"); text=text.replaceAll("\r\n "+i+"\\.(.*?)","\r\n***$1"); text=text.replaceAll("\r\n "+i+"\\.(.*?)","\r\n****$1"); text=text.replaceAll("\r\n "+i+"\\.(.*?)","\r\n*****$1"); text=text.replaceAll("\r\n "+i+"\\.(.*?)","\r\n******$1"); } return text; } public String replaceUrl(String text,String baseurl,String dict) throws UnsupportedEncodingException{ //attachment:IconsPage/info.png -> while (true){ Pattern pattern= Pattern.compile("attachment:(.*?)/(\\S*)"); Matcher matcher=pattern.matcher(text); String replace; if (matcher.find()) { replace=baseurl+matcher.group(1)+"?action=AttachFile&do=get&target="+URLEncoder.encode(matcher.group(2), "UTF-8"); text=text.substring(0,matcher.start(0))+replace+text.substring(matcher.end(0)); continue; } pattern= Pattern.compile("attachment:(\\S*)"); matcher=pattern.matcher(text); if(matcher.find()) { replace=baseurl+dict+"?action=AttachFile&do=get&target="+URLEncoder.encode(matcher.group(1), "UTF-8"); text=text.substring(0,matcher.start(0))+replace+text.substring(matcher.end(0)); continue; } break; } return text; } public String tableConv(String html){ //||a||b||c|| -> {| //||d||e||f|| |a||b||c // |- // |d||e||f // |} String[] lines=html.split("\r\n"); String block = ""; StringBuffer bf= new StringBuffer(); boolean start=false; for (int i=0;i<lines.length;i++){ String line=lines[i].trim(); if (line.startsWith("||")){ if (! start){ start=true; String str=line.substring(1,line.length()-2); str=str.replaceAll("<bgcolor.*?>",""); str=str.replaceAll("<style.*?>",""); block="{|border=\"1\" cellspacing=\"0\"\r\n"+str; }else{ String str=line.substring(1,line.length()-2); str=str.replaceAll("<bgcolor.*?>",""); str=str.replaceAll("<style.*?>",""); block=block+"\r\n|-\r\n"+str; } }else{ if (start){ block=block+"\r\n|}\r\n"; bf.append(block); start=false; } bf.append(lines[i]+"\r\n"); } } return bf.toString(); } public void putText(String dict,String html,String surl) throws MalformedURLException, IOException{ URL url; URLConnection conn; InputStream in; BufferedReader read; StringBuffer sb; if (html.length()<5){ System.out.println(dict+" is short:"+html); return; }
// if (html.length()<300){ // if (html.toUpperCase().trim().indexOf("REFRESH")>0) { // System.out.println(dict+" is REFRESH."); // return; // } // if (html.toUpperCase().trim().indexOf("REDIRECT")>0) { // System.out.println(dict+" is REDIRECT."); // return; // } // }
String ex="UbuntuHelp"; if (surl.startsWith("https://wiki")){ ex="UbuntuWiki"; } try{ url=new URL("http://wiki.ubuntu.org.cn/"+ex+":"+dict+"?action=raw"); conn = url.openConnection(); conn.setRequestProperty("Cookie", cookie); in=conn.getInputStream(); read=new BufferedReader(new InputStreamReader(in)); sb=new StringBuffer(); while (true){ String line=read.readLine(); if (line==null) break; sb.append(line+"\r\n"); } if (sb.toString().trim().length()==html.trim().length()) { System.out.println(dict+" no changes."); return; } }catch(Exception ex0){ //nothing } url=new URL("http://wiki.ubuntu.org.cn/"+ex+":"+dict+"?action=edit"); conn = url.openConnection(); conn.setRequestProperty("Cookie", cookie); in=conn.getInputStream(); read=new BufferedReader(new InputStreamReader(in)); sb=new StringBuffer(); while (true){ String line=read.readLine(); if (line==null) break; sb.append(line+"\r\n"); } int start=sb.indexOf("<form id=\"editform\"");
int end=sb.indexOf("