diff --git a/src/client/result/AbstractDoCoMoResultParser.java b/src/client/result/AbstractDoCoMoResultParser.java deleted file mode 100644 index caf7541..0000000 --- a/src/client/result/AbstractDoCoMoResultParser.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 2007 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.zxing.client.result; - -/** - *

See - * - * DoCoMo's documentation about the result types represented by subclasses of this class.

- * - *

Thanks to Jeff Griffin for proposing rewrite of these classes that relies less - * on exception-based mechanisms during parsing.

- * - * @author Sean Owen - */ -abstract class AbstractDoCoMoRXingResultParser extends RXingResultParser { - - static String[] matchDoCoMoPrefixedField(String prefix, String rawText) { - return matchPrefixedField(prefix, rawText, ';', true); - } - - static String matchSingleDoCoMoPrefixedField(String prefix, String rawText, boolean trim) { - return matchSinglePrefixedField(prefix, rawText, ';', trim); - } - -} diff --git a/src/client/result/AbstractDoCoMoResultParser.rs b/src/client/result/AbstractDoCoMoResultParser.rs new file mode 100644 index 0000000..de76197 --- /dev/null +++ b/src/client/result/AbstractDoCoMoResultParser.rs @@ -0,0 +1,39 @@ +// /* +// * Copyright 2007 ZXing authors +// * +// * Licensed under the Apache License, Version 2.0 (the "License"); +// * you may not use this file except in compliance with the License. +// * You may obtain a copy of the License at +// * +// * http://www.apache.org/licenses/LICENSE-2.0 +// * +// * Unless required by applicable law or agreed to in writing, software +// * distributed under the License is distributed on an "AS IS" BASIS, +// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// * See the License for the specific language governing permissions and +// * limitations under the License. +// */ + +// package com.google.zxing.client.result; + +// /** +// *

See +// * +// * DoCoMo's documentation about the result types represented by subclasses of this class.

+// * +// *

Thanks to Jeff Griffin for proposing rewrite of these classes that relies less +// * on exception-based mechanisms during parsing.

+// * +// * @author Sean Owen +// */ +// abstract class AbstractDoCoMoRXingResultParser extends RXingResultParser { + +// static String[] matchDoCoMoPrefixedField(String prefix, String rawText) { +// return matchPrefixedField(prefix, rawText, ';', true); +// } + +// static String matchSingleDoCoMoPrefixedField(String prefix, String rawText, boolean trim) { +// return matchSinglePrefixedField(prefix, rawText, ';', trim); +// } + +// } diff --git a/src/client/result/BookmarkDoCoMoResultParser.java b/src/client/result/BookmarkDoCoMoResultParser.java deleted file mode 100644 index 5e68175..0000000 --- a/src/client/result/BookmarkDoCoMoResultParser.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2007 ZXing authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.zxing.client.result; - -import com.google.zxing.RXingResult; - -/** - * @author Sean Owen - */ -public final class BookmarkDoCoMoRXingResultParser extends AbstractDoCoMoRXingResultParser { - - @Override - public URIParsedRXingResult parse(RXingResult result) { - String rawText = result.getText(); - if (!rawText.startsWith("MEBKM:")) { - return null; - } - String title = matchSingleDoCoMoPrefixedField("TITLE:", rawText, true); - String[] rawUri = matchDoCoMoPrefixedField("URL:", rawText); - if (rawUri == null) { - return null; - } - String uri = rawUri[0]; - return URIRXingResultParser.isBasicallyValidURI(uri) ? new URIParsedRXingResult(uri, title) : null; - } - -} diff --git a/src/client/result/BookmarkDoCoMoResultParser.rs b/src/client/result/BookmarkDoCoMoResultParser.rs new file mode 100644 index 0000000..120db5d --- /dev/null +++ b/src/client/result/BookmarkDoCoMoResultParser.rs @@ -0,0 +1,52 @@ +/* + * Copyright 2007 ZXing authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// package com.google.zxing.client.result; + +// import com.google.zxing.RXingResult; + +use crate::RXingResult; + +use super::{ + ParsedClientResult, ResultParser, URIParsedRXingResult, URIParsedResult, URIResultParser, +}; + +/** + * @author Sean Owen + */ +pub fn parse(result: &RXingResult) -> Option { + let rawText = result.getText(); + if !rawText.starts_with("MEBKM:") { + return None; + } + let title = ResultParser::match_single_do_co_mo_prefixed_field("TITLE:", rawText, true); + let rawUri = ResultParser::match_do_co_mo_prefixed_field("URL:", rawText); + if rawUri.is_none() { + return None; + } + let uri = rawUri?[0].clone(); + if URIResultParser::is_basically_valid_uri(&uri) { + Some(ParsedClientResult::URIResult(URIParsedRXingResult::new( + uri, title.unwrap_or("".to_owned()), + ))) + } else { + None + } + + // return URIRXingResultParser.isBasicallyValidURI(uri) ? new URIParsedRXingResult(uri, title) : null; +} + +// } diff --git a/src/client/result/ResultParser.rs b/src/client/result/ResultParser.rs index b4bf074..48fb872 100644 --- a/src/client/result/ResultParser.rs +++ b/src/client/result/ResultParser.rs @@ -36,7 +36,7 @@ use crate::{exceptions::Exceptions, RXingResult}; use super::{ GeoResultParser, ISBNResultParser, ParsedClientResult, ParsedRXingResult, ProductResultParser, SMSMMSResultParser, TelResultParser, TextParsedRXingResult, URIResultParser, URLTOResultParser, - WifiResultParser, + WifiResultParser, BookmarkDoCoMoResultParser, }; /** @@ -103,8 +103,8 @@ pub fn getMassagedText(result: &RXingResult) -> String { } pub fn parseRXingResult(theRXingResult: &RXingResult) -> ParsedClientResult { - let PARSERS: [&ParserFunction; 8] = [ - // new BookmarkDoCoMoRXingResultParser(), + let PARSERS: [&ParserFunction; 9] = [ + &BookmarkDoCoMoResultParser::parse, // new AddressBookDoCoMoRXingResultParser(), // new EmailDoCoMoRXingResultParser(), // new AddressBookAURXingResultParser(), @@ -392,3 +392,11 @@ pub fn matchSinglePrefixedField( } // return matches == null ? null : matches[0]; } + +pub fn match_do_co_mo_prefixed_field( prefix:&str, raw_text:&str) -> Option> { + matchPrefixedField(prefix, raw_text, ';', true) + } + + pub fn match_single_do_co_mo_prefixed_field( prefix:&str, raw_text:&str, trim:bool) -> Option{ + matchSinglePrefixedField(prefix, raw_text, ';', trim) + } \ No newline at end of file diff --git a/src/client/result/mod.rs b/src/client/result/mod.rs index a9cff1c..de35c63 100644 --- a/src/client/result/mod.rs +++ b/src/client/result/mod.rs @@ -17,6 +17,8 @@ mod ProductResultParser; mod URIParsedResult; mod URIResultParser; mod URLTOResultParser; +mod AbstractDoCoMoResultParser; +mod BookmarkDoCoMoResultParser; use std::fmt;