# mwtitle
[](https://crates.io/crates/mwtitle)
[](https://docs.rs/mwtitle)
[](https://doc.wikimedia.org/mwbot-rs/mwbot/mwtitle/)
[](https://gitlab.wikimedia.org/repos/mwbot-rs/mwbot/-/commits/main)
[](https://doc.wikimedia.org/cover/mwbot-rs/mwbot/coverage)
`mwtitle` is a library for parsing, normalizing and formatting MediaWiki
page titles. It is primarily a port of the MediaWikiTitleCodec class
from MediaWiki, and passes the MediaWiki test suite.
The easiest way to get started is create a [`TitleCodec`] from a [siteinfo](https://www.mediawiki.org/wiki/API:Siteinfo)
API request.
```rust
let url = "https://en.wikipedia.org/w/api.php\
?action=query&meta=siteinfo\
&siprop=general|namespaces|namespacealiases|interwikimap\
&formatversion=2&format=json";
let resp: SiteInfoResponse = client.get(url).send().await?.json().await?;
let codec = TitleCodec::from_site_info(resp.query)?;
let title = codec.new_title("Talk:Main Page#Section 1")?;
assert_eq!(title.namespace(), 1);
assert_eq!(title.dbkey(), "Main_Page");
assert_eq!(title.fragment(), Some("Section 1"));
assert_eq!(codec.to_pretty(&title), "Talk:Main Page".to_string());
assert_eq!(
codec.to_pretty_with_fragment(&title),
"Talk:Main Page#Section 1".to_string()
);
```
It's also possible to possible to create a `TitleCodec` from a JSON
`siteinfo-namespaces.json` or compressed `siteinfo-namespaces.json.gz`
that comes from Wikimedia dumps. This requires the extra `utils` feature
to be enabled.
### Contributing
`mwtitle` is a part of the [`mwbot-rs` project](https://www.mediawiki.org/wiki/Mwbot-rs).
We're always looking for new contributors, please [reach out](https://www.mediawiki.org/wiki/Mwbot-rs#Contributing)
if you're interested!
## License
This crate is released under GPL-3.0-or-later.
See [COPYING](./COPYING) for details.