diff --git a/400_xowa/src/gplx/xowa/mws/Xomw_linker.java b/400_xowa/src/gplx/xowa/mws/Xomw_linker.java
index 39bb7472f..97e6ff3ef 100644
--- a/400_xowa/src/gplx/xowa/mws/Xomw_linker.java
+++ b/400_xowa/src/gplx/xowa/mws/Xomw_linker.java
@@ -27,7 +27,7 @@ import gplx.langs.phps.utls.*;
* P7: $html = HtmlArmor::getHtml($text);
*/
public class Xomw_linker {
- private final Bry_bfr tmp = Bry_bfr_.New();
+ private final Bry_bfr tmp = Bry_bfr_.New(), tmp_2 = Bry_bfr_.New();
private final Linker_rel_splitter splitter = new Linker_rel_splitter();
private final Xomw_html_utl html_utl = new Xomw_html_utl();
private byte[] wg_title = null;
@@ -35,8 +35,9 @@ public class Xomw_linker {
private final byte[][] split_trail_rv = new byte[2][];
private Btrie_slim_mgr split_trail_trie;
private final Xomw_atr_mgr tmp_attribs = new Xomw_atr_mgr();
- private final Xomw_img_prms params_list = new Xomw_img_prms();
+ private final Xomw_mto_params params_list = new Xomw_mto_params();
private final Xomw_mto_params mto_params = new Xomw_mto_params();
+
private static final byte[] Atr__class = Bry_.new_a7("class"), Atr__rel = Bry_.new_a7("rel"), Atr__href = Bry_.new_a7("href"), Rel__nofollow = Bry_.new_a7("nofollow");
public static final byte[]
Align__frame__center = Bry_.new_a7("center")
@@ -190,16 +191,17 @@ public class Xomw_linker {
}
}
- boolean thumb = false;
+ Xomw_mto thumb = new Xomw_mto(file.url);
if (file != null && handler_params.width != -1) {
// Create a resized image, without the additional thumbnail features
// $thumb = $file->transform(handler_params);
}
else {
- thumb = false;
+ thumb = null;
}
- if (!thumb) {
+ byte[] s = null;
+ if (thumb == null) {
// $s = self::makeBrokenImageLinkObj($title, frame_params['title'], '', '', '', $time == true);
}
else {
@@ -213,17 +215,22 @@ public class Xomw_linker {
params_list.img_cls = Xomw_img_prms.Cls_add(params_list.img_cls, Img_class__thumbborder);
}
// $params = self::getImageLinkMTOParams(frame_params, $query, $parser) + $params;
-//
-// $s = $thumb->toHtml($params);
+
+ thumb.To_html(tmp, tmp_2, params_list);
+ s = tmp.To_bry_and_clear();
}
if (frame_params.align != Bry_.Empty) {
- tmp.Add_str_a7("
{$s}
");
+ tmp.Add_str_a7("");
+ tmp.Add_str_a7("
");
+ s = tmp.To_bry_and_clear();
}
// XO.MW: "str_replace("\n", ' ', prefix . $s . postfix);"
int rv_bgn = bfr.Len();
bfr.Add(prefix);
- bfr.Add_bfr_and_clear(tmp);
+ bfr.Add(s);
bfr.Add(postfix);
Bry_.Replace_all_direct(bfr.Bfr(), Byte_ascii.Nl, Byte_ascii.Space, rv_bgn, bfr.Len());
}
@@ -281,10 +288,10 @@ public class Xomw_linker {
// Reduce width for upright images when parameter 'upright' is used
handler_params.width = frame_params.upright != -1 ? 130 : 180;
}
- Xomw_mto thumb = null;
boolean no_scale = false;
boolean manual_thumb = false;
+ Xomw_mto thumb = null;
int outer_width = 0;
if (!exists) {
outer_width = handler_params.width + 2;
@@ -305,8 +312,8 @@ public class Xomw_linker {
}
else if (frame_params.framed != null) {
// Use image dimensions, don't scale
- thumb = new Xomw_mto();
// thumb = $file->getUnscaledThumb(handler_params);
+ thumb = new Xomw_mto(file.url);
no_scale = true;
}
else {
diff --git a/400_xowa/src/gplx/xowa/mws/Xomw_xml.java b/400_xowa/src/gplx/xowa/mws/Xomw_xml.java
index 27a73a79b..1a2039046 100644
--- a/400_xowa/src/gplx/xowa/mws/Xomw_xml.java
+++ b/400_xowa/src/gplx/xowa/mws/Xomw_xml.java
@@ -23,7 +23,7 @@ public class Xomw_xml {
// characters (<, >, &) are escaped but illegals are not touched.
// ARGS: contents defaults to ""
// XO.MW:SYNC:1.29; DATE:2017-02-03
- public static void Element(Bry_bfr bfr, byte[] element, Ordered_hash attribs, byte[] contents, boolean allow_short_tag) {
+ public static void Element(Bry_bfr bfr, byte[] element, List_adp attribs, byte[] contents, boolean allow_short_tag) {
bfr.Add_byte(Byte_ascii.Angle_bgn).Add(element);
if (attribs.Len() > 0) {
Expand_attributes(bfr, attribs);
@@ -48,7 +48,7 @@ public class Xomw_xml {
// Return null if no attributes given.
// @param array $attribs Array of attributes for an XML element
// XO.MW:SYNC:1.29; DATE:2017-02-03
- public static void Expand_attributes(Bry_bfr bfr, Ordered_hash attribs) {
+ public static void Expand_attributes(Bry_bfr bfr, List_adp attribs) {
int attribs_len = attribs.Len();
for (int i = 0; i < attribs_len; i += 2) {
// XO.MW: $out .= " {$name}=\"" . Sanitizer::encodeAttribute( $val ) . '"';
@@ -62,7 +62,7 @@ public class Xomw_xml {
// This opens an XML element
// XO.MW:SYNC:1.29; DATE:2017-02-03
- public static void Open_element(Bry_bfr bfr, byte[] element, Ordered_hash attribs) {
+ public static void Open_element(Bry_bfr bfr, byte[] element, List_adp attribs) {
bfr.Add_byte(Byte_ascii.Angle_bgn).Add(element);
Expand_attributes(bfr, attribs);
bfr.Add_byte(Byte_ascii.Angle_end);
@@ -77,7 +77,7 @@ public class Xomw_xml {
// Same as Xml::element(), but does not escape contents. Handy when the
// content you have is already valid xml.
// XO.MW:SYNC:1.29; DATE:2017-02-03
- public static void Tags(Bry_bfr bfr, byte[] element, Ordered_hash attribs, byte[] contents) {
+ public static void Tags(Bry_bfr bfr, byte[] element, List_adp attribs, byte[] contents) {
Open_element(bfr, element, attribs);
bfr.Add(contents);
bfr.Add_byte(Byte_ascii.Angle_bgn).Add_byte(Byte_ascii.Slash).Add(element).Add_byte(Byte_ascii.Angle_end);
diff --git a/400_xowa/src/gplx/xowa/mws/filerepos/files/Xomw_file.java b/400_xowa/src/gplx/xowa/mws/filerepos/files/Xomw_file.java
index a69e85f3b..d9730681c 100644
--- a/400_xowa/src/gplx/xowa/mws/filerepos/files/Xomw_file.java
+++ b/400_xowa/src/gplx/xowa/mws/filerepos/files/Xomw_file.java
@@ -17,6 +17,7 @@ along with this program. If not, see .
*/
package gplx.xowa.mws.filerepos.files; import gplx.*; import gplx.xowa.*; import gplx.xowa.mws.*; import gplx.xowa.mws.filerepos.*;
public class Xomw_file {
+ public byte[] url;
public boolean Allow_inline_display() {
return true;
}
diff --git a/400_xowa/src/gplx/xowa/mws/medias/Xomw_mto.java b/400_xowa/src/gplx/xowa/mws/medias/Xomw_mto.java
index e48defb0c..e7d840abc 100644
--- a/400_xowa/src/gplx/xowa/mws/medias/Xomw_mto.java
+++ b/400_xowa/src/gplx/xowa/mws/medias/Xomw_mto.java
@@ -20,8 +20,11 @@ import gplx.langs.htmls.*;
import gplx.langs.phps.utls.*;
public class Xomw_mto {
private int width = -1, height = -1;
- private byte[] url = null;
- private final Ordered_hash attribs = Ordered_hash_.New_bry(), link_attribs = Ordered_hash_.New_bry();
+ public byte[] url;
+ private final List_adp attribs = List_adp_.New(), link_attribs = List_adp_.New();
+ public Xomw_mto(byte[] url) {
+ this.url = url;
+ }
// Return HTML
tag for the thumbnail, will include
// width and height attributes and a blank alt text (as required).
@@ -57,31 +60,31 @@ public class Xomw_mto {
// byte[] query = options.desc_query;
attribs.Clear();
- attribs.Add(Gfh_atr_.Bry__alt, alt);
- attribs.Add(Gfh_atr_.Bry__src, url);
+ attribs.Add_many(Gfh_atr_.Bry__alt, alt);
+ attribs.Add_many(Gfh_atr_.Bry__src, url);
boolean link_attribs_is_null = false;
if (!Php_utl_.Empty(options.custom_url_link)) {
link_attribs.Clear();
- link_attribs.Add(Gfh_atr_.Bry__href, options.custom_url_link);
+ link_attribs.Add_many(Gfh_atr_.Bry__href, options.custom_url_link);
if (!Php_utl_.Empty(options.title)) {
- link_attribs.Add(Gfh_atr_.Bry__title, options.title);
+ link_attribs.Add_many(Gfh_atr_.Bry__title, options.title);
}
if (Php_utl_.Empty(options.custom_target_link)) {
- link_attribs.Add(Gfh_atr_.Bry__target, options.custom_target_link);
+ link_attribs.Add_many(Gfh_atr_.Bry__target, options.custom_target_link);
}
else if (Php_utl_.Empty(options.parser_extlink_target)) {
- link_attribs.Add(Gfh_atr_.Bry__target, options.parser_extlink_target);
+ link_attribs.Add_many(Gfh_atr_.Bry__target, options.parser_extlink_target);
}
if (Php_utl_.Empty(options.parser_extlink_rel)) {
- link_attribs.Add(Gfh_atr_.Bry__rel, options.parser_extlink_rel);
+ link_attribs.Add_many(Gfh_atr_.Bry__rel, options.parser_extlink_rel);
}
}
else if (!Php_utl_.Empty(options.custom_title_link)) {
// byte[] title = options.custom_title_link;
link_attribs.Clear();
-// link_attribs.Add(Gfh_atr_.Bry__href, title.Get_link_url());
+// link_attribs.Add_many(Gfh_atr_.Bry__href, title.Get_link_url());
// byte[] options_title = options.title;
-// link_attribs.Add(Gfh_atr_.Bry__title, Php_utl_.Empty(options_title) ? title.Get_full_text : options_title;
+// link_attribs.Add_many(Gfh_atr_.Bry__title, Php_utl_.Empty(options_title) ? title.Get_full_text : options_title;
}
else if (!Php_utl_.Empty(options.desc_link)) {
// link_attribs = $this->getDescLinkAttribs(
@@ -91,30 +94,30 @@ public class Xomw_mto {
}
else if (!Php_utl_.Empty(options.file_link)) {
link_attribs.Clear();
-// link_attribs.Add(Gfh_atr_.Bry__href, file.Get_url());
+// link_attribs.Add_many(Gfh_atr_.Bry__href, file.Get_url());
}
else {
link_attribs_is_null = true;
if (!Php_utl_.Empty(options.title)) {
- attribs.Add(Gfh_atr_.Bry__title, options.title);
+ attribs.Add_many(Gfh_atr_.Bry__title, options.title);
}
}
if (!Php_utl_.Empty(options.no_dimensions)) {
- attribs.Add(Gfh_atr_.Bry__width, Int_.To_bry(width));
- attribs.Add(Gfh_atr_.Bry__height, Int_.To_bry(height));
+ attribs.Add_many(Gfh_atr_.Bry__width, Int_.To_bry(width));
+ attribs.Add_many(Gfh_atr_.Bry__height, Int_.To_bry(height));
}
if (!Php_utl_.Empty(options.valign)) {
- attribs.Add(Gfh_atr_.Bry__style, Bry_.Add(Bry__vertical_align, options.valign));
+ attribs.Add_many(Gfh_atr_.Bry__style, Bry_.Add(Bry__vertical_align, options.valign));
}
if (!Php_utl_.Empty(options.img_cls)) {
- attribs.Add(Gfh_atr_.Bry__class, options.img_cls);
+ attribs.Add_many(Gfh_atr_.Bry__class, options.img_cls);
}
if (Php_utl_.Is_set(options.override_height)) {
- attribs.Add(Gfh_atr_.Bry__class, options.override_height);
+ attribs.Add_many(Gfh_atr_.Bry__class, options.override_height);
}
if (Php_utl_.Is_set(options.override_width)) {
- attribs.Add(Gfh_atr_.Bry__width, options.override_height);
+ attribs.Add_many(Gfh_atr_.Bry__width, options.override_height);
}
// Additional densities for responsive images, if specified.
@@ -130,7 +133,7 @@ public class Xomw_mto {
}
// Wrap some XHTML text in an anchor tag with the given attributes
// XO.MW:SYNC:1.29; DATE:2017-02-03
- private void Link_wrap(Bry_bfr bfr, Ordered_hash link_attribs, byte[] contents) {
+ private void Link_wrap(Bry_bfr bfr, List_adp link_attribs, byte[] contents) {
if (link_attribs != null) {
Xomw_xml.Tags(bfr, Gfh_tag_.Bry__a, link_attribs, contents);
}
diff --git a/400_xowa/src/gplx/xowa/mws/parsers/lnkis/Xomw_lnki_wkr.java b/400_xowa/src/gplx/xowa/mws/parsers/lnkis/Xomw_lnki_wkr.java
index f7a2e39de..37884b21b 100644
--- a/400_xowa/src/gplx/xowa/mws/parsers/lnkis/Xomw_lnki_wkr.java
+++ b/400_xowa/src/gplx/xowa/mws/parsers/lnkis/Xomw_lnki_wkr.java
@@ -353,25 +353,30 @@ public class Xomw_lnki_wkr {// THREAD.UNSAFE: caching for repeated calls
// }
//
if (ns.Id_is_file()) {
-// if (!wfIsBadImage(nt->getDBkey(), this->mTitle)) {
-// if (wasblank) {
-// // if no parameters were passed, text
-// // becomes something like "File:Foo.png",
-// // which we don't want to pass on to the
-// // image generator
-// text = '';
-// } else {
-// // recursively parse links inside the image caption
-// // actually, this will parse them in any other parameters, too,
-// // but it might be hard to fix that, and it doesn't matter ATM
+// boolean is_good_image = !wfIsBadImage(nt->getDBkey(), this->mTitle)
+ boolean is_good_image = true;
+ if (is_good_image) {
+ if (was_blank) {
+ // if no parameters were passed, text
+ // becomes something like "File:Foo.png",
+ // which we don't want to pass on to the
+ // image generator
+ text = Bry_.Empty;
+ }
+ else {
+ // recursively parse links inside the image caption
+ // actually, this will parse them in any other parameters, too,
+ // but it might be hard to fix that, and it doesn't matter ATM
// text = this->replaceExternalLinks(text);
// holders->merge(this->replaceInternalLinks2(text));
-// }
-// // cloak any absolute URLs inside the image markup, so replaceExternalLinks() won't touch them
-// s .= prefix . this->armorLinks(
-// this->makeImage(nt, text, holders)) . trail;
-// continue;
-// }
+ }
+ // cloak any absolute URLs inside the image markup, so replaceExternalLinks() won't touch them
+ bfr.Add(prefix);
+ // Armor_links(Make_image(bfr, nt, text, holders))
+ Make_image(bfr, nt, text, holders);
+ bfr.Add(trail);
+ continue;
+ }
}
else if (ns.Id_is_ctg()) {
bfr.Trim_end_ws(); // s = rtrim(s . "\n"); // T2087
@@ -434,7 +439,7 @@ public class Xomw_lnki_wkr {// THREAD.UNSAFE: caching for repeated calls
}
}
}
- public void Make_image(Bry_bfr bfr, Xoa_ttl title, byte[] link_args, boolean holders) {
+ public void Make_image(Bry_bfr bfr, Xoa_ttl title, byte[] link_args, Xomw_link_holders holders) {
// Check if the options text is of the form "options|alt text"
// Options are:
// * thumbnail make a thumbnail with enlarge-icon and caption, alignment depends on lang
@@ -471,6 +476,7 @@ public class Xomw_lnki_wkr {// THREAD.UNSAFE: caching for repeated calls
// Fetch and register the file (file title may be different via hooks)
Xomw_file file = new Xomw_file();
+ file.url = Bry_.new_a7("A.png");
// list($file, $title) = $this->fetchFileAndTitle($title, $options);
// Get parameter map
diff --git a/400_xowa/src/gplx/xowa/mws/parsers/lnkis/Xomw_lnki_wkr__file__tst.java b/400_xowa/src/gplx/xowa/mws/parsers/lnkis/Xomw_lnki_wkr__file__tst.java
new file mode 100644
index 000000000..f421014cb
--- /dev/null
+++ b/400_xowa/src/gplx/xowa/mws/parsers/lnkis/Xomw_lnki_wkr__file__tst.java
@@ -0,0 +1,26 @@
+/*
+XOWA: the XOWA Offline Wiki Application
+Copyright (C) 2012 gnosygnu@gmail.com
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as
+published by the Free Software Foundation, either version 3 of the
+License, or (at your option) any later version.
+
+This program 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 Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with this program. If not, see .
+*/
+package gplx.xowa.mws.parsers.lnkis; import gplx.*; import gplx.xowa.*; import gplx.xowa.mws.*; import gplx.xowa.mws.parsers.*;
+import org.junit.*;
+public class Xomw_lnki_wkr__file__tst {
+ private final Xomw_lnki_wkr__fxt fxt = new Xomw_lnki_wkr__fxt();
+ @Before public void init() {fxt.Clear();}
+ @Test public void Plain() {
+ fxt.Test__to_html("[[File:A.png]]", "
");
+ }
+}
diff --git a/400_xowa/src/gplx/xowa/mws/parsers/lnkis/Xomw_lnki_wkr__tst.java b/400_xowa/src/gplx/xowa/mws/parsers/lnkis/Xomw_lnki_wkr__text__tst.java
similarity index 92%
rename from 400_xowa/src/gplx/xowa/mws/parsers/lnkis/Xomw_lnki_wkr__tst.java
rename to 400_xowa/src/gplx/xowa/mws/parsers/lnkis/Xomw_lnki_wkr__text__tst.java
index 961b36a15..a81cc462b 100644
--- a/400_xowa/src/gplx/xowa/mws/parsers/lnkis/Xomw_lnki_wkr__tst.java
+++ b/400_xowa/src/gplx/xowa/mws/parsers/lnkis/Xomw_lnki_wkr__text__tst.java
@@ -17,7 +17,7 @@ along with this program. If not, see .
*/
package gplx.xowa.mws.parsers.lnkis; import gplx.*; import gplx.xowa.*; import gplx.xowa.mws.*; import gplx.xowa.mws.parsers.*;
import org.junit.*;
-public class Xomw_lnki_wkr__tst {
+public class Xomw_lnki_wkr__text__tst {
private final Xomw_lnki_wkr__fxt fxt = new Xomw_lnki_wkr__fxt();
@Before public void init() {fxt.Clear();}
@Test public void Text() {fxt.Test__parse("a [[A]] z" , "a z");}
@@ -26,7 +26,6 @@ public class Xomw_lnki_wkr__tst {
@Test public void Html__self() {fxt.Test__to_html("[[Page_1]]" , "Page_1");}
@Test public void Html__text() {fxt.Test__to_html("[[A]]" , "A");}
@Test public void Html__capt() {fxt.Test__to_html("[[A|a]]" , "a");}
-// @Test public void Html__file() {fxt.Test__to_html("[[File:A.png|thumb|abc]]" , "Page_1");}
}
class Xomw_lnki_wkr__fxt {
private final Xomw_lnki_wkr wkr;